호이스팅이란

윤수호·2022년 8월 1일
0

JavaScript에서 호이스팅(hoisting)이란, 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미합니다. var로 선언한 변수의 경우 호이스팅 시 undefined로 변수를 초기화합니다. 반면 let과 const로 선언한 변수의 경우 호이스팅 시 변수를 초기화하지 않습니다.

호이스팅을 설명할 땐 주로 "변수의 선언과 초기화를 분리한 후, 선언만 코드의 최상단으로 옮기는" 것으로 말하곤 합니다. 따라서 변수를 정의하는 코드보다 사용하는 코드가 앞서 등장할 수 있습니다. 다만 선언과 초기화를 함께 수행하는 경우, 선언 코드까지 실행해야 변수가 초기화된 상태가 됨을 주의하세요.

그리고 선언만 초기화 대상입니다.
ex) 함수 선언식

그렇기 때문에 함수 표현식은 초기화 대상이 아니고 함수 선언식만 초기화 대상입니다.

JavaScript는 초기화를 제외한 선언만 호이스팅합니다. 변수를 먼저 사용하고 그 후에 선언 및 초기화가 나타나면, 사용하는 시점의 변수는 기본 초기화 상태(var 선언 시 undefined, 그 외에는 초기화하지 않음)입니다. 예를 들어,

console.log(num); // 호이스팅한 var 선언으로 인해 undefined 출력
var num; // 선언
num = 6; // 초기화

js실행시 let,const,var를 탐색 한 후 선언을 한다.
하지만 var같은 경우는 선언 과 초기화가 같이 일어나고 초기화할때 undefined로 초기화 하기 때문에 위와 같은 코드가 실행되는 것이다.
하지만 let,const는 선언과 초기화가 일어나긴하지만 선언 후에 TDZ 후 초기화가 되기 때문에
선언하기 전에 호출을 할경우 에러를 발생시키게 되는 것이다.

TDZ란( Temporal Dead Zone ) TDZ라는 것은 변수 선언 및 초기화 하기 전 사이의 사각지대 인 것을 알 수 있습니다! 간단하게 말하자면 선언하기 전에 초기화하게 되면 TDZ로 인해 에러를 발생 시킨다고 볼 수 있습니다. 하지만 var와 같은경우 선언과 초기화가 같이 일어나는 경우는 TDZ가 일어나지 않고 undefined로 초기화가 되기 떄문에 초기화 전에 선언하여도 undefined로 나오는 것입니다.

profile
기술블로그 시작

0개의 댓글