본문 바로가기
개발일지/JavaScript

시간상 사각지대 TDZ

by 한삐 2022. 8. 16.
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

댓글