[JavaScript] var, let, const 그리고 TDZ

J·2023년 6월 3일
0

JavaScript

목록 보기
2/11

호이스팅을 공부하며 var, let, const 변수 선언 키워드와 TDZ에 대해서 좀 더 알아보기로 했다.

var

  • var로 선언된 변수는 호이스팅 발생함. 변수 선언문 이전에도 변수를 참조할 수 있지만, 값은 초기화되기 전에 undefined로 평가됨.
  • 함수 스코프를 가지며 함수 내부에서 선언된 변수는 함수 내부에서만 유효함. 함수 외부에서 선언된 변수는 전역 변수로 취급됨.
  • 중복선언 가능함. 나중에 선언된 변수가 이전에 선언된 변수를 덮어씀.

let

  • let으로 선언된 변수도 호이스팅이 발생하지만, 선언되기 전에 접근하려고 할 때 TDZ에 의해 ReferenceError 발생함
  • 블록스코프를 가지며 블록 내에서 선언된 변수는 해당 블록 내에서만 유효함.
  • 중복 선언 불가능, 재할당 가능.

const

  • const로 선언된 변수는 상수를 선언하는 키워드임. 값을 변경할 수 없기 때문에 선언과 동시에 초기화해야 함.
  • const로 선언된 변수도 블록 스코프를 가지며, let과 마찬가지로 호이스팅이 발생하지만 TDZ에 의해 초기화되기 전 접근하려고 할 때 ReferenceError 발생함.
  • 중복 선언, 재할당 둘 다 불가능.

Temporal Dead Zone

  • TDZ는 변수가 선언되기 전 접근하려 할 때 발생하는 에러 영역임.
  • let과 const는 선언 시점 이전 접근 시도하면 ReferenceError 발생함. 이렇게 오류가 발생하는 영역을 TDZ라 한다.
  • let, const 변수도 var처럼 호이스팅이 발생하지만 TDZ 때문에 발생하지 않는 것 처림 보이는 것.

정리

  • 값이 재할당되지 않는 경우에는 보다 안전한 변수 선언을 위해 const를 사용하는 것이 좋다. 하지만 const는 값을 변경할 수 없기 때문에 값이 변해야 하는 상황에서는 let을 사용해야함. var는 호이스팅과 스코프의 특성으로 인해 ES6 이후 권장되지 않음.
profile
벨로그로 이사 중

0개의 댓글