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입니다.
참고자료
'1차 공부 > 기술면접 준비' 카테고리의 다른 글
프레임워크와 라이브러리 차이점에 대해 설명해주세요. (0) | 2023.02.23 |
---|---|
argument와 parameter의 차이 (0) | 2023.02.22 |
Restful API / 알고있는 메소드와 그 기준 / RESTful API 가 아닌 것 (0) | 2023.02.21 |
웹페이지가 브라우저에 랜더링되는 과정을 설명해주세요. (0) | 2023.02.21 |
스택, 큐 (0) | 2023.02.13 |