자바스크립트 엔진(인터프리터)이 코드를 실행하기 전에 변수와 함수, 클래스의 선언문을 끌어올리는 것을 말한다.
변수의 선언과 초기화를 분리한 후, 선언만 코드의 최상단으로 옮긴다.
값을 저장할 수 있는 공간
자료를 저장할 수 있는 이름이 주어진 기억 장소
보통 let과 const를 많이 사용한다.
let : 재할당이 필수로 필요할 경우에만 사용
const : 재할당이 필요 없는 경우 (가능한 const 선호)
위 변수 키워드가 생기기 전까지는 문제 덩어리인 var를 사용했다.
어떤 이유로 var를 쓰지 말라고 한 것일까?
기본적으로 함수의 호이스팅은 함수의 선언문 전에 호출이 가능하게 해준다.
함수의 선언문은 선언 이전에도 호출이 가능하다는 것이다.
print();
function print() {
console.log('hello');
}
하지만 ! 변수는 변수 선언하기 이전에 호출하면 앱이 죽어버린다.
console.log(hi); // ☠️
let hi = 'hi';
함수 선언만 호이스팅이 가능해서 호출이 가능하고, 변수(let, const)와 클래스는 선언된 이름만 호이스팅이 가능하고 값 자체는 순서대로 코드 차례가 왔을 때만 가능하다.