let / const 는 호이스팅이 일어나지 않는다고 알고 있었는데 유투브 강의 보다가 TDZ에 대해서 찾아보다가
let / const도 호이스팅이 일어난다는 걸 알게 됐다.
일단 Javascript에서 변수는 선언, 초기화, 할당 이라는 3가지 단계로 생성이 된다고 한다.
var는 선언과 초기화를 동시에 진행하고 let / const는 선언과 초기화가 분리되어 진행된다.
var는 선언되고 undefined로 바로 초기화가 된다.
변수가 선언되어 실행컨텍스트에 변수객체에 등록되고
선언된 변수가 초기화 까지 되어 메모리에 할당이 되어야 변수에 접근이 가능하다.
그래서 실행 컨텍스트 안에서 호이스팅으로 인해 변수가 선언될 때 var는 선언과 undefined로 초기화가 동시에 진행되기 때문에
선언하기 전에 접근하려고 해도 오류가 나지 않는다.
그런데 let / const는 호이스팅으로 선언이 똑같이 되지만 초기화는 되지 않아서 접근하려고 하면 ReferenceError가 발생한다.
TDZ는 변수가 선언되서 초기화 전까지 변수를 읽거나 쓸 수 없는 시점을 말한다.
let / const 도 호이스팅으로 인해 실행컨텍스트에 선언이 되지만 초기화 되기 전까지 TDZ 구간에서는 에러가 발생한다.
참고)
https://noogoonaa.tistory.com/78
'javascript' 카테고리의 다른 글
this (0) | 2020.09.12 |
---|---|
함수 전달인자와 매개변수 (0) | 2017.04.13 |
기타 연산자들 (0) | 2017.03.12 |
평가 표현식 (0) | 2017.03.12 |
변수 선언 (0) | 2017.02.21 |