사전적 의미로 호이스팅은 끌어올리다는 뜻으로 자바스크립트에서는 변수를 끌어올린다.
즉, 변수가 함수 내에서 정의되면 선언이 함수의 최상단으로 올라가고 함수 밖에서 정의된 경우에는 전역 컨텍스트릐 최상단으로 이동한다.
호이스팅에 대해 이해하기 위해서는 선언(Declaration)과 할당(Assignment)에 대해서도 이해해야한다.
먼저 선언은 끌어올려지는 것, 즉 호이스팅의 대상이다.
function DeclarTest() {
console.log(x); // undefined
var x = 100;
console.log(x); // 100
}
DeclarTest();
먼저, 위와 같은 코드에서 동작하면 자바스크립트에서는 출력 오류가 없겠지만 다른 언어에서는 오류가 발생한다.
자바스크립트에서는 undefined로 출력되고 넘어가는데 이유는
var x = 100; 의 구문에서 var x; 를 호이스팅하기 때문이다.
하지만, 할당(Assignment)는 런타임 과정에서 이루어지므로 호이스팅 되지 않는다.