호이스팅이란 함수 선언부가 유효범위 최상단으로 끌어올려지는 현상을 의미합니다. 자바스크립트에서 함수는 실행되기 전 필요한 변수값들을 모아 유효범위의 최상단으로 끌어올리게 됩니다.
이러한 호이스팅은 var변수와 함수 선언문에서만 일어나게 됩니다.
함수 선언문으로 작성된 함수 사용 시에는 호이스팅이 발생하여 함수 먼저 호출 가능합니다. 함수선언문의 경우 함수 선언, 초기화, 할당이 한번에 이루어지 때문입니다.
함수 선언문
const a = 7
double() // 값: 14
function double() {
console.log(a * 2)
}
함수 표현식
함수 선언문과 달리 함수 표현식은 인터프리터가 해당 코드에 도달할 때만 로드가 되기 때문에 함수 사용 전에 호출이 불가합니다.
const a = 7
double() // TypeError: double is not a function
const double = function () {
console.log(a * 2)
}