⭐️⭐️⭐️ 호이스팅

윤장호·2025년 3월 7일

매일메일

목록 보기
10/90
post-thumbnail

호이스팅(Hoisting)

호이스팅은 자바스크립트가 코드를 실행하기 전의 변수와 함수 선언을 코드의 최상단으로 끌어올리는 것처럼 동작하는 특징입니다. 이 때문에 코드의 선언된 위치보다 상단에서 변수에 접근할 수 있는 것처럼 보입니다.

한편, 호이스팅은 값 할당까지 끌어올리지는 않습니다.

console.log(myVar) // undefined

var myVar = 10;
console.log(myVar); // 10

위와 같이 var로 선언된 변수는 선언과 초기화는 끌어올려지지만 값 할당은 끌어올려지지 않기 때문에, 값 할당이 이뤄지기 전까지는 undefined로 출력됩니다.

반면, 함수 선언식은 함수 자체가 호이스팅되기 때문에, 함수 호출을 선언 이전에 해도 문제가 없습니다.

console.log(myFunction()); // 'Hello World'

function myFunction() {
  return 'Hello World';
}

Temporal Dead Zone(TDZ)

단, ES6에서 도입된 letconst는 선언문 이전에 접근하려고 하면 ReferenceError가 발생합니다.
이는 Temporal Dead Zone이라는 개념 때문입니다. TDZ는 변수가 선언되었지만 초기화되기 전까지의 구간을 말합니다.
letconst로 선언된 변수에는 TDX가 존재하며, 이 구간에서 변수에 접근할 경우 ReferenceError가 발생합니다. 이처럼 TDZ는 코드에서 변수가 선언된 시점부터 초기화될 때까지의 구간에서 변수를 사용하지 못하게 막아주는 역할을 합니다.

console.log(myLet); // ReferenceError 발생

let myLet = 10;

참고로, let 변수는 선언 자체는 호이스팅되지만 초기화가 호이스팅되지 않습니다.
따라서 var는 선언 즉시 undefined로 초기화되어 선언 전에 사용할 수 있지만, let은 코드가 실제로 실행되어 값의 초기화가 이루어지기 전까지 변수를 사용할 수 없습니다.

profile
프론트엔드 개발자

0개의 댓글