[JavaScript] var / let / const 호이스팅과 TDZ

2026. 3. 10. 22:30·우아한테크코스
728x90

호이스팅이란?

호이스팅은 자바스크립트 엔진이 코드 실행 전에 변수 선언을 해당 스코프의 최상단으로 끌어올리는 동작이다.

중요한 건 var, let, const 셋 다 호이스팅이 된다는 점이다.

💡차이는 초기화 여부에 있다.💡


var (선언 + 초기화까지 호이스팅함)

console.log(foo); // undefined
foo = 123;
console.log(foo); // 123
var foo;

JS 엔진은 실행 전에 위 코드를 아래처럼 처리한다. (변화 주목!)

var foo;           // 선언 + undefined 초기화 -> 최상단으로 끌어올림
console.log(foo);  // undefined
foo = 123;
console.log(foo);  // 123

var은 선언과 동시에 undefined로 초기화까지 완료되기 때문에, 선언 이전에 접근해도 에러가 나지 않는다.

호이스팅이 되지 않았다면 ReferenceError가 발생했을 것이다.


let / const (선언만 호이스팅함, 초기화는 TDZ로부터 차단)

let과 const도 호이스팅은 된다.

단, 초기화가 이루어지지 않은 채로 끌어올려지기 때문에 선언 이전에 접근하면 ReferenceError가 발생한다.

이 접근 불가 구간을 TDZ(Temporal Dead Zone, 일시적 사각지대) 라고 한다.

console.log(bar); // ReferenceError: Cannot access 'bar' before initialization
let bar = 1;

선언 라인에 도달하는 순간 초기화가 이루어지고, 그 이후부터 정상 접근이 가능하다!


세 가지 비교 정리

키워드 호이스팅 초기화 TDZ 선언 전 접근
var O undefined로 초기화 X 가능 (undefined)
let O 초기화 안 됨 O 불가 (ReferenceError)
const O 초기화 안 됨 O 불가 (ReferenceError)

셋 다 호이스팅되지만, var이 "더 많이" 호이스팅된다고 표현하는 이유가 바로 초기화까지 완료되기 때문이다.

728x90

'우아한테크코스' 카테고리의 다른 글

[JavaScript] 스코프(Scope) 개념정리  (1) 2026.03.10
[TDD] TDD와 페어프로그래밍  (2) 2026.03.08
[우아한테크코스 8기] 레벨 1 Gemini Canvas 웹앱 만들기 회고  (0) 2026.03.01
[우아한테크코스 8기] 웹 프론트엔드 최종 합격 후기  (4) 2026.01.30
[우아한테크코스 8기] 프리코스 오픈미션 회고 💡  (2) 2025.11.25
'우아한테크코스' 카테고리의 다른 글
  • [JavaScript] 스코프(Scope) 개념정리
  • [TDD] TDD와 페어프로그래밍
  • [우아한테크코스 8기] 레벨 1 Gemini Canvas 웹앱 만들기 회고
  • [우아한테크코스 8기] 웹 프론트엔드 최종 합격 후기
프론트 개발자 김현중
프론트 개발자 김현중
👋반갑습니다 저는 나눔을 실천하는 개발자 꿈나무 김현중입니다⌨️🚀
  • 프론트 개발자 김현중
    삥구의 개발블로그
    프론트 개발자 김현중
  • 전체
    오늘
    어제
    • 분류 전체보기 (106)
      • 알고리즘 (5)
      • Swift (3)
      • 컴퓨터네트워크 (1)
      • React (39)
      • Docker (1)
      • SQL (8)
      • Database (2)
      • 배포 (1)
      • Spring (9)
      • TypeScript (5)
      • Next.js (13)
      • Git (1)
      • 회고 (1)
      • 컴퓨터그래픽스 (2)
      • Python (1)
      • Brew (1)
      • LangChain (2)
      • React Native (1)
      • 우아한테크코스 (10)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    회고
    typescript
    Backend
    javascript
    java
    springboot
    appRouter
    프론트엔드
    frontend
    nextjs
    우테코
    백준
    react
    데이터베이스
    Spring
    Next.js
    database
    ReactHooks
    웹개발
    우아한테크코스
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.1
프론트 개발자 김현중
[JavaScript] var / let / const 호이스팅과 TDZ
상단으로

티스토리툴바