[JS] TDZ(Temporal Dead Zone)

괴발·2022년 8월 11일
0

울지말고JavaScript

목록 보기
4/9

TDZ(Temporal Dead Zone)란 무엇일까?

일시적 사각지대.
let과 const도 호이스팅이 되지만, 변수가 선언되기 전 호출되면 ReferenceError가 발생한다.

호이스팅(끌어올리기) 후 초기화 단계에서 메모리 공간을 확보하는데 선언을 호이스팅해도 초기화 전 까지 메모리 공간이 없기때문에 변수를 참조할 수 없다.

우선 변수 선언의 3단계를 알아보자.

1. 선언 단계(Declaration phase) : 변수를 실행 컨텍스트의 변수 객체에 등록하는 단계이다.

2. 초기화 단계(Initialization phase) : 변수 객체에 등록되어 있는 변수를 위하여 메모리를 할당하는 단계이다. 여기서 변수는 undefined로 초기화된다.

3. 할당 단계(Assignment phase) : 변수에 실제로 값이 할당되는 단계이다. (undefined → 특정한 값)


console.log(a); // undefined
var a = 123; 

var의 경우 선언단계와 초기화단계가 같이 이루어지고, 할당 단계는 나중에 이루어진다.

console.log(b); // Uncaught ReferenceError: c is not defined
let b = 123;

스코프에 진입할 때 변수를 만들고, TDZ가 생성되지만 코드 실행이(=실행 컨텍스트가) 변수가 있는 실제 위치에 도달할 때까지 엑세스를 못한다.

profile
괴발개발

0개의 댓글