JavaScript에서 호이스팅(hoisting)이란, 인터프리터가 변수와 함수의 메모리 공간을 선언 전에 미리 할당하는 것을 의미한다 즉
변수나 함수의 선언이 코드 최상단으로 끌어올려진 것처럼 동작하는 현상을 말한다.
var
로 선언한 변수의 경우 호이스팅 시 undefined
로 변수를 초기화합니다. 반면 let과 const
로 선언한 변수의 경우 호이스팅 시 변수를 초기화하지 않습니다.
console.log(a); // undefined
var a = 4;
console.log(a) // 4
함수 선언문
으로 정의한 함수는 함수 선언문 이전에 호출할 수 있다. 함수 선언문을 통해 암묵적으로 생성된 식별자는 함수 객체로 초기화된다.
console.log(add(2,5));; // 7
console.log(sub(2,5));; // TypeError: sub is not a function
function add(x,y) {
return x + y;
}
// 함수 표현식
var sub = function (x,y) {
return x - y;
}
함수 표현식
으로 함수를 정의하면 함수 호이스팅이 발생하는 것이 아니라 변수 호이스팅
이 발생한다.