// 함수 참조
console.dir(add); // ⨍ add(x, y)
console.dir(sub); // undefined
// 함수 호출
console.log(add(2, 5)); // 7
console.log(sub(2, 5)); // TypeError: sub is not a function
// 함수 선언문
// add 선언 + function 할당
function add(x, y) {
return x + y;
}
// 함수 표현식
// sub 선언 -> function 할당
var sub = function(x, y) {
return x - y;
};
함수 선언문으로 정의한 함수는 함수 선언문 이전에 호출할 수 있다
함수 표현식으로 정의한 함수는 함수 표현식 이전에 호출할 수 없다
이는 함수 선언문으로 정의한 함수와 함수 표현식으로 정의한 함수의 생성 시점이 다르기 때문
함수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 JS 고유의 특징을 함수 호이스팅이라고 함
함수 표현식으로 함수를 정의하면 함수 호이팅이 아닌 변수 호이스팅이 발생함