1차 공부/기술면접 준비

Hoisting이란? TDZ란?

공대탈출 2023. 2. 22. 12:09

Hoisiting이란 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미합니다. var, let, const, 선언적함수, class가 대표적으로 호이스팅되는 것들입니다. 이때 const, let, class는 TDZ의 영향을 받습니다.

 

TDZ란 Temporal Dead Zone으로 const, let, class가 호이스팅 시 초기화되지않기 때문에 갖는 일시적 사각지대입니다.

// var
var->AllocateTo(VariableLocation::PARAMETER, index);

// const
VariableProxy* proxy =
    DeclareBoundVariable(local_name, VariableMode::kConst, pos);
proxy->var()->set_initializer_position(position());

// let
VariableProxy* proxy =
    DeclareBoundVariable(variable_name, VariableMode::kLet, class_token_pos);
proxy->var()->set_initializer_position(end_pos);

var는 변수객체를 생성한 후  AllocateTo메소드를 통해 바로 메모리 공간에 공간을 할당하지만, let과 const는 set_initializer_position메소드를 통해 해당 코드의 위치를 의미하는 position값만 정해준다. 선언은 되어있지만 변수에 값을 담기 위한 메모리에 공간이 확보되지 않은 상태이기때문에 let과 const는 TDZ의 영향을 받습니다.

 

따라서 선언은 되어있지만 아직 초기화 되지 않아 변수에 담길 값을 위한 공간이 메모리에 할당되지 않은 상태의 구역이 TDZ입니다.

 

 

 

 

 

 


참고자료

https://ingg.dev/hoisting/

 

[JS] 호이스팅과 TDZ에 대하여

js 호이스팅(Hoisting)이란 변수나 함수를 선언했을 때 코드 범위(scope) 내의 최상단으로 끌어올려지는 것처럼 보이는 현상이다. 흔히 var 는 호이스팅이 발생하며, const 와 let 은 발생하지 않는다고

ingg.dev