호이스팅

park·2026년 2월 18일

호이스팅이란?

자바스크립트 엔진은 코드를 실행하기 전 '컴파일 단계'를 거치며 변수 선언을 메모리에 미리 등록합니다.
실제 코드 위치와 상관없이 선언부만 최상단으로 끌어올려진 것처럼 보이는 현상을 말합니다.

변수별 호이스팅 동작 방식

호이스팅은 모든 변수(var, let, const)에 발생하지만, 그 결과는 확연히 다릅니다.

  • 실행 전에 변수 이름을 먼저 environmentRecord에 등록.
  • 변수/함수 선언이 실행 전에 스코프 상단으로 끌어올려진 것처럼 동작
  • var: 선언 + 초기화(undefined)
  • let, const: 선언만 호이스팅 (TDZ 존재) => 할당 전 reference error
    (TDZ : 실행 전으로 선언은 되었으나 초기화가 되지 않은 상태.)

일시적 사각지대 (Temporal Dead Zone, TDZ)

= 초기화 전 접근 금지 구간
= 스코프의 시작 지점부터 초기화 시작 지점까지 변수를 참조할 수 없는 구간

var

console.log(a) // undefined
var a = 10
----- 동작과정 -----
var a
console.log(a) // undefined
a = 10

let, const

console.log(b) // ReferenceError(TDZ 발생)
let b = 10

let, const함수 선언문

sayHello() // 정상 실행

function sayHello() {
  console.log(""hello"")
}
//→ 함수 전체가 호이스팅됨.	

함수 표현식

sayHi() // TypeError

var sayHi = function () {
  console.log(""hi"")
}
//→ 변수는 undefined로 호이스팅
//→ 함수는 아직 할당 안 됨.
profile
park

0개의 댓글