728x90
TDZ란 일시적/시간적 사각지대로, 스코프의 시작-(TDZ)-초기화 시작 사이의 구간을 의미한다.
스코프의 시작- (TDZ) -초기화 시작
즉, 변수가 선언되고 변수의 초기화가 이뤄지기 전까지의 구간이다.
이 구간의 변수를 TDZ에 들어간 변수라고 표현한다.
function do_something() {
console.log(bar); // undefined
console.log(foo); // ReferenceError
var bar = 1;
let foo = 2;
}
시간상 사각지대인 이유는, 사각지대가 코드의 작성 순서(위치)가 아닌,
코드의 실행 순서(시간)에 의해 형성되기 때문에다.
ex) let 변수 선언이 변수에 접근하는 함수보다 아래여도 함수의 호출 시점이 사각지대 밖인 경우
{
// TDZ가 스코프 맨 위에서부터 시작
const func = () => console.log(letVar); // OK
// TDZ 안에서 letVar에 접근하면 ReferenceError
let letVar = 3; // letVar의 TDZ 종료
func(); // TDZ 밖에서 정상적으로 호출
}
참조할 만한 예제(let/var 스코프의 차이점)
블록 내에서 사용한 경우
let은 변수의 스코프를 해당 블록으로 제한하고,
var는 스코프를 함수로 제한한다는 차이가 있다.
var a = 1;
var b = 2;
if (a === 1) {
var a = 11; // 전역 변수
let b = 22; // if 블록 변수
console.log(a); // 11
console.log(b); // 22
}
console.log(a); // 11
console.log(b); // 2
var는 쓰지 말래서 안썼는데 이런 차이가 있었구나 싶다.
728x90
'개발일지 > JavaScript' 카테고리의 다른 글
javaScript 배열 다뤄보기 2 (0) | 2022.08.24 |
---|---|
javaScript 배열 다뤄보기 1 (0) | 2022.08.23 |
js 반복문 다뤄보기 (0) | 2022.08.09 |
JS 계산 / 날짜 / 문자 메서드 (0) | 2022.08.09 |
JavaScript 숫자열/문자열 다뤄보기 (0) | 2022.08.09 |
댓글