정의

변수/함수의 선언이 해당 스코프의 최상단으로 끌어올려지는 현상

자바스크립트만의 특징

원인

자바스크립트 엔진의 2단계 실행 구조로 인해 발생

  1. 코드를 읽어들이며 변수/함수 선언을 메모리에 등록
  2. 실제 코드 실행

케이스별 동작

var → 호이스팅 자체는 적용되나 값 할당이 뒤늦게 적용

console.log(myVar); // undefined

var myVar = 5;

let, const → 호이스팅되지만 TDZ(Temporal Dead Zone)이 적용되어 접근 불가

console.log(myLet); // ReferenceError: Cannot access 'myLet' before initialization

let myLet = 10;

console.log(myConst); // ReferenceError: Cannot access 'myConst' before initialization

const myConst = 20;

함수 선언문 → 정상 동작

alert(greet("김철수")); // 선언 이전에 호출 가능

function greet(name: string){
	return `안녕하세요, ${name}님!`;
}