자바스크립트 엔진은 코드를 실행하기까지 두 단계의 과정을 거친다.
자바스크립트 엔진은 실행하기 전에 먼저 컴파일 단계를 거친다.
이때 함수 및 변수 선언을 한 부분이 메모리에 할당이 된다. 따라서 실제 코드에서 선언된 위치보다 앞에서 접근이 가능해진다.
var를 통해서 선언하게 되면 컴파일 단계에서 변수가 메모리에 올라가고 undefined로 초기화된다.
console.log(myVar); // undefined
var myVar = 5;
console.log(myVar); // 5
컴파일 단계에서 메모리에 할당된 변수와 함수가 실행되는 단계이다.
이때 변수가 할당된 값을 가지게 되고 함수가 호출되면 그 안의 코드가 실행된다.
호이스팅이 가능한 이유는 한 줄씩 바로 해석하는 것이 아니라 컴파일 단계에서 코드를 파악하고 먼저 메모리에 할당이 되는 과정을 거치기 때문!