본문 바로가기

javascript

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

https://medium.com/korbit-engineering/let%EA%B3%BC-const%EB%8A%94-%ED%98%B8%EC%9D%B4%EC%8A%A4%ED%8C%85-%EB%90%A0%EA%B9%8C-72fcf2fac365

 

let과 const는 호이스팅 될까?

let 또는 const가 호이스팅 되는지 여부를 알아보기 전에 호이스팅과 Temporal Dead Zone(TDZ)이란 개념에 대해 알아보겠다.

medium.com

https://ui.toast.com/weekly-pick/ko_20191014

 

TDZ을 모른 채 자바스크립트 변수를 사용하지 말라

간단한 질문을 하나 하겠다. 아래 코드 스니펫에서 에러가 발생할까? 첫 번째 코드는 인스턴스를 생성한 다음 클래스를 선언한다.

ui.toast.com

https://funveloper.tistory.com/25

'javascript' 카테고리의 다른 글

this  (0) 2020.09.12
함수 전달인자와 매개변수  (0) 2017.04.13
기타 연산자들  (0) 2017.03.12
평가 표현식  (0) 2017.03.12
변수 선언  (0) 2017.02.21