728x90
TDZ(Temporal Dead Zone)
다음과 같은 코드가 있다고 해보자
1
2
|
const a = 1;
a;//1
|
cs |
1
2
3
|
a//throws 'Reference error'
const a = 1;
a;//1
|
cs |
첫번째 예시에서는 제대로 된 결과가 나오고 두번째 예시에서는 reference error가 뜬다. 두번째 예시에서 1줄이 TDZ이다.
TDZ는 변수를 선언하기 이전에 변수를 엑세스 하는 것을 금한다.
다음과 같은 statement는 TDZ의 영향을 받는다.
1. const, let
2. class statement, construcotr() 내부에 있는 super()
3. Default function parameters
다음은 hoisting으로 인해 영향을 받지 않는 것들이다
1. var
2. function
3. import modules
typeof와 TDZ
만약 정의되지 않은 변수를 typeof하면 undefined가 출력된다. 하지만 TDZ에서 typeof를 하게 되면 ReferenceError가 뜬다. 이 이유는 변수가 아래에 정의되 있기 때문이다
1
2
|
typeof val;
let val;
|
cs |
TDZ와 scope
TDZ는 선언문이 존재하는 스코프 범위 에서만 변수에 영향을 준다.
1
2
3
4
5
6
7
8
|
function func(){
cont b = 1;
typeof a;//undefined, function scope
if(b == 1){//inner scope
typeof a;
let a;
}
}
|
cs |
'java script' 카테고리의 다른 글
DOM(Document Object Model) (0) | 2021.08.03 |
---|---|
JS에서 객체를 비교하는 방법 (0) | 2021.07.24 |
Event propagation-bubbling, capturing (0) | 2021.06.23 |
Execution Context, Hoisting (0) | 2021.04.29 |
어떤 자바스크립트를 사용하고 있는지 알아야한다. (0) | 2021.02.05 |