TDZ에 대해 알려면, 호이스팅과 let, const, scope 등에 대한 기본적인 이해가 있어야 한다.
console.log(x); // undefined
console.log(y); // ReferenceError
var x = "x";
let y = "y";
일반적인 호이스팅과 관련된 상식이면 변수 선언부는 해당 scope의 최상단으로 끌어올려져 해석된다.
function test(){
var foo = 33;
if (true) {
let foo = (foo + 55); // ReferenceError
console.log(foo)
}
}
test();
MDN에 있는 예제 소스이다.
(function(a = b, b) {
}(undefined, 1)); // ReferenceError
(function(a = a) {
}()); // ReferenceError
위의 2가지 예제들도 똑같이 에러가 발생한다.