4장, 13장, 15장
변수 호이스팅, 함수 호이스팅
var, const, let
변수 이름을 등록하여 js엔진에 변수 존재 알리는 선언 단계, 값을 저장하기 위한 메모리 공간을 확보하고 undefined를 초기화하는 초기화 단계를 거칩니다.
console.log(num);
var num;
참조 에러가 아닌 undefined가 출력됩니다. 변수 선언과 초기화 단계가 코드가 실행되는 런타임 이전에 먼저 발생하기 때문입니다.
함수표현식이 아니라 함수 선언문을 이용할 경우 함수가 선언되기 전에 호출하면 참조 에러가 나지 않고 정상적으로 동작합니다.
선언단계에서 초기화 시작 시점까지 변수를 참조할 수 없는 일시적 사각지대(TDZ)가 있기 때문이빈다