TDZ(Temporal Dead Zone)
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
TDZ(Temporal Dead Zone)이란?
함께보면 좋은 글 2020/07/05 - [프로그래밍 언어/Javascript] - 자바스크립트 호이스팅(Hoisting)이란? 오늘은 TDZ(Temporal Dead Zone)에 대해서 알아보도록 하겠습니다. 이번 포스팅은 자바스크립트의 호이스.
noogoonaa.tistory.com
let과 const는 호이스팅 될까?
let 또는 const가 호이스팅 되는지 여부를 알아보기 전에 호이스팅과 Temporal Dead Zone(TDZ)이란 개념에 대해 알아보겠다.
medium.com
https://ui.toast.com/weekly-pick/ko_20191014
TDZ을 모른 채 자바스크립트 변수를 사용하지 말라
간단한 질문을 하나 하겠다. 아래 코드 스니펫에서 에러가 발생할까? 첫 번째 코드는 인스턴스를 생성한 다음 클래스를 선언한다.
ui.toast.com