Day 6while(condition) { ... }
do{ ... } while(condition) // 본문이 최소 1회 무조건 실행됨
break 반복문 종료continue 해당 항목만 건너뛰기for..in 객체의 프로퍼티 존재 여부 확인 (prototype의 프로퍼티도 확인하여 반환함)enumerable 열거 가능한 속성 : true여야 hasOwnProperty로 조회 가능immutable 변하지 않는iterable 반복 가능한for..of 유사배열, 배열에서 사용Object.keys()Object.values()Object.entries()defer, async
defer asyncfunction func(var1, var2 = 'default값'){ ... }return 함수 어디서든 사용 가능하고 사용 즉시 함수 실행 종료Day 7선언문은 값을 반환하지 않지만, 표현식은 값을 반환하여 변수 할당 가능선언문은 함수 호이스팅으로 정의 전에 호출이 가능하지만, 표현식은 변수의 값으로 평가되기 때문에 런타임에 함수를 생성하여 정의 전에 호출이 불가능선언문은 함수가 선언된 코드 블록 안에서만 유효하지만, 표현식은 코드 블록 밖에서 미리 변수를 선언하여 다른 코드 블록에서도 사용 가능 (많이 사용되는 방법은 아님)IIFE캡슐화 변수를 보호하기 위한 용도const func = _ => {..} 사용 가능const createUser = (name,age) => ({name: name, age: age})arguments 사용 불가 : rest parameter 대체 사용this가 바인딩되지 않음 : 화살표 함수에서 사용된 this는 상위 실행 컨텍스트의 this값을 참조constructor 없음 생성자 함수로 사용될 수 없고 그만큼 가벼움Day 8재귀 어떤 문제를 해결하기 위해서 나 자신이 필요할 때 사용실행 컨텍스트 스택 자료 구조에 저장됨Last in First out 방식으로 작동 
얕은 복사 방법
let user = { name: 'sozzang' }
// for .. in
let clone = {}
for(let key in user) { clone[key] = user[key] }
// Object.assign()
let permission01 = { canView: true }
let permission02 = { canEdit: true }
Object.assign(user, permission01, permission02)
let clone = Object.assign({}, user)
// 전개 연산자 ...
const spreadObj = { ...user }
const spreadObj2 = {...user, ...permission01, ...permission02}
const [a, b, c] = [10, 20, 30] // a = 10, b = 20, c = 30const {짜장면:짜장, 짬뽕, 탕수육} = {탕수육: 20000, 짜장면: 5000, 짬뽕: 6000} // 짜장 = 5000, 짬뽕 = 6000, 탕수육 = 20000Day 9this (⭐️)construcotr 프로퍼티의 존재 여부this는 런타임에 결정되어 호출한 대상을 가리킴일반 함수const user = {
totalGrades: function(){ console.log(this) } // user
}
user.totalGrades()메서드 축약형const user = {
totalGrades(){ console.log(this) } // user
}
user.totalGrades()화살표 함수const user = {
totalGrades = () => console.log(this) // window
}
user.totalGrades()[[Prototype]] : 값 = 참조하는 다른 객체(프로토타입) 또는 null__proto__ (던더 프로토) : 프로토타입의 getter, setterObject.getPrototypeOf, Object.setPrototypeOf 사용이 권장되지만 사실 아직도 많이 사용함
F.prototype : constructor가 소유 | 사용 주체는 생성자 함수 | 인스턴스의 프로토타입을 할당하기 위해 사용__proto__ : 모든 객체가 소유 | 사용 주체도 모든 객체 | 객체가 자신의 프로토타입에 접근/교체 하기 위해 사용function Rabbit() {}
// Rabbit.prototype = { constructor: Rabbit }
alert( Rabbit.prototype.constructor == Rabbit ); // trueconstructorconstructor는 생성자 함수 자신을 가리키고 알맞은 값을 보장하지 않음Rabbit.prototype = { jumps: true }; // X
Rabbit.prototype.jumps = true; // Ocall, apply, bind (⭐️)함수.call('a', a, b) // a를 this로 전달하여 대신 함수 실행 (매개변수는 낱개)
함수.apply('a', [a, b]) // a를 this로 전달하여 대신 함수 실행 (매개변수가 배열)
함수.bind('a', a, b) // a를 this로 전달하여 함수 본문 전달

extends 클래스 상속class Child extends Parentsuper 상속 클래스의 생성자에선 반드시 호출해야 함Day 10?.obj?.prop
obj?.[prop]
obj?.method()
obj.method()?.

Call Stack 코드가 실행되면 기본적으로 동기적으로 작업됨 Web APIs setTimeout과 같은 비동기적인 작업이 요청되면, 해당 작업은 Web APIs로 이동하여 타이머 실행휴 ~ 10일차까지 한번 복습을 마쳤다.
확실히 실행 컨텍스트에 대한 이해가 깊어져서 초반에 마주했던 실행 컨텍스트 설명이 쉽게 납득되었고
클로저도 더 확실히 정리가 되었다. (뿌야 ~)
오늘 지금 15분 더 채우면 순공 6시간째인데 ... !
아직 10일차라는게 초큼 놀랍지만 !! 그래도 확실히 도움이 되었다 !