인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당 하는 것을 의미한다.
var로 선언한 변수의 경우 호이스팅 시 undefined로 변수를 초기화 합니다.
반면, let과 const로 선언한 변수의 경우 호이스팅 시 변수를 초기화하지 않습니다.
catName("클로이");
function catName(name) {
console.log("제 고양이의 이름은 " + name + "입니다");
}
처럼 함수 호출이 함수 자체보다 앞서 존재하지만, 코드가 동작하는 모습을 확인할 수 있다.
JavaScript는 초기화를 제외한 선언만 호이스팅한다.
console.log(num); // 호이스팅한 var 선언으로 인해 undefined 출력
var num; // 선언
num = 6; // 초기화
변수를 먼저 사용하고 그 후에 선언 및 초기화가 나타나면, 사용하는 시점의 변수는 기본 초기화 상태이다.(var 선언 시 undefined, 그 외에는 초기화하지 않음)
let과 const로 선언한 변수도 호이스팅 대상이지만, var와 달리 호이스팅 시 undefined로 변수를 초기화하지는 않는다. 따라서 변수의 초기화를 수행하기 전에 읽는 코드가 먼저 나타나면 예외가 발생한다.