자바스크립트에서 호이스팅이란, 변수와 함수 선언이 코드의 최상단으로 끌어올려지는 현상을 말함. 이는 자바스크립트 엔진이 코드 실행 전 선언들을 메모리에 할당하는 방식 때문에 발생함. 호이스팅은 변수의 선언 부분만 끌어올려지며 할당은 그대로 남아있게 됨. 따라서 변수를 정의하는 코드보다 사용하는 코드가 앞서 등장할 수 있음.
호이스팅의 대상
console.log(a); // Output: undefined
var a = 10;
// 위 코드는 다음과 같이 호이스팅이 적용됨.
var a; // 선언
console.log(a);
a = 10; // 할당
hello(); // Output: Hello, world!
function hello() {
console.log("Hello, world!");
}
console.log(a); // Output: ReferenceError: Cannot access 'a' before initialization
let a = 10;
hello(); // Output: TypeError: hello is not a function
var hello = function() {
console.log("Hello, world!");
}
hello(); // Output: ReferenceError: Cannot access 'hello' before initialization
const hello = function () {
console.log('Hello, world!');
};