재밌는 글을 읽었다.
TDZ 존은 선언 전에는 변수에 접근하는 것을 금지한다. 라고 하더라.
우선 변수의 생성 과정을 보면
var 는 선언 및 초기화(undefined 를 할당)가 동시에 된다. 그래서 선언하지 않고 사용하게 되면 undefined가 나오는 것.
let 은 선언 단계와 초기화 단계가 따로 있다. hoisting 되면서 선언이 이루어 지지만 초기화 단계는 실제로 코드에 도달해야 한다.
const 는 선언과 할당이 동시에 되어야 한다.
let과 const, class, constructor 내부의 super()에 기본 함수 매개변수까지 TDZ 존의 영향을 받아서 선언 전에 사용하려 한다면 ReferenceError를 뱉는다.
Uncaught ReferenceError: can't access lexical declaration 'count' before initialization
사실 let 과 const 또한 hoisting 된다. 그럼에도 error 가 나는것이 이 TDZ zone 때문이다.
또한 var는 물론이고 함수 선언과 import 또한 호이스팅 되서 선언 전에 접근 할 수 있다.