printHello() 함수가 정의되기 전에 호출하고 있어서 오류가 나거나 정상적으로 실행되지 않을 것 같지만, 코드를 실행해 보면 함수가 정상적으로 호출되어 Hello라는 값이 출력됩니다. 호이스팅은 선언과 할당을 분리해서 선언부를 스코프 최상위로 올리는 것이라고 했죠? 함수 선언문으로 정의된 함수는 호이스팅에서 선언부로 봅니다. 그래서 앞의 코드는 코드 실행 시 함수 선언문을 최상위로 끌어올리면서 다음 코드처럼 실행됩니다.
function printHello(){ // 함수 선언문을 최상위로 끌어올림
console.log("Hello");
}
printHello();
그러나 함수 표현식으로 정의된 함수는 함수 선언문으로 정의된 함수와는 조금 다르게 작동합니다.
10/04/hoisting_express.js
printHello();
var printHello = function printHello(){
console.log("Hello");
}
실행결과
TypeError: printHello is not a function