sub 변수에 함수리터럴 할당 이전에 변수를 참조하면 변수 호이스팅에 의해 undefined로 평가된다. 즉 함수 표현식은 함수 호이스팅이 발생하는게 아니라 변수 호이스팅이 발생하는 것
함수리터럴이 할당되는 시점부터 함수객체로 되어 변수호이스팅이 아닌 함수 호이스팅으로 평가한다.
console.dir(add); // f add(x,y)
console.dir(sub); // undefined
console.log(add(2,5)); // 7
console.log(sub(2,5)); // TypeError: sub is not function
// 함수 선언문
function add(x,y){
return x+y;
}
// 함수 표현식 - 함수호이스팅x 변수호이스팅o
// 함수표현식 할당전이라 함수호이스팅이 아닌 변수 호이스팅으로 평가한다.
var sub = function (x,y) {
return x-y;
};