TDZ
는 스코프의 시작 지점부터 초기화 시작 지점까지의 사각지대 구간을 뜻한다.비유하자면 선언 단계와 초기화 단계 사이에 잠시 머물러 있는 것이라고 할 수 있다.
var, let/const 변수의 라이프사이클
var 변수의 라이프사이클
var는 변수 선언 전에 선언 단계와 초기화 단계를 동시에 실행한다.
선언과 초기화가 동시에 실행되기 떄문에 실행 컨텍스트 변수 객체를 등록 후 바로 그 메모리를 undefined 한다.
그래서 선언하기도 전에 undefined로 호출이되는 호이스팅이 발생한다.let/const 변수의 라이프사이클
여기서 let food; 와 const food;는 food라는 변수를 각각 let과 const로 선언했을 때를 분리했을 때를 가정한것이다.
let과 const는 var와는 다르게 선언단계와 초기화 단계가 따로 분리되어 실행된다.
그래서 선언 단계와 초기화 단계 사이에서는 실행 컨텍스트에는 변수를 등록했지만 메모리가 할당되지 않은 상태라ReferenceError
가 나오는 것이다.이런 사각지대를 TDZ(Temporal Dead Zone) 라고 하는 것이다.
결론
TDZ는 변수가 선언되고 초기화되기 사이의 사각지대이다.
var는 변수의 선언단계와 초기화단계가 동시에 실행되어 TDZ가 존재하지 않기 때문에 호이스팅이 일어나는 것이다.
초기화 단계에 오면 TDZ 상태가 해제된다.