자바스크립트의 호이스팅에 대해 알아보려한다.
JavaScript에서 호이스팅(hoisting)이란, 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미합니다. var로 선언한 변수의 경우 호이스팅 시 undefined로 변수를 초기화합니다. 반면 let과 const로 선언한 변수의 경우 호이스팅 시 변수를 초기화하지 않습니다.
즉, 변수의 선언과 초기화를 분리한 후, 선언만 코드의 최상단으로 옮기는 것,
함수와 변수는 코드를 실행하기 전에 실행 컨텍스트를 위해 메모리에 저장되는 것이다.
Javascript 는 코드를 실행하기 전에, 실행 컨텍스트를 위한 과정에서 모든 선언에 대한 메모리부터 할당하게 된다.
따라서 코드 실행 전 이미 변수선언/함수선언
이 저장되어있기 때문에 선언문보다 참조,호출이 먼저 나와도 오류없이 동작하는 것이다.
JavaScript 는 초기화를 제외한 선언만 호이스팅한다.
변수를 사용하고 그 후에 선언 및 초기화가 나타나면,
사용하는 시점이 변수는 기본 초기화상태(var
선언시 undefined
,그 외에는 초기화하지 않음) 이다.
console.log(num); // 호이스팅한 var 선언으로 인해 undefined 출력
var num; // 선언
num = 6; // 초기화
ReferenceError
에러가 발생한다.console.log(num); // ReferenceError
num = 6; // 초기화