console.dir(add); //ƒ add(x, y)
console.dir(sub); //undefined
console.log(add(2, 5)); //7
console.log(sub(2, 5)); //Uncaught TypeError: sub is not a function
function add(x, y) {
return x + y;
}
var sub = function (x, y) {
return x - y;
};
모든 선언문이 그러하듯 함수 선언문 또한 런타임 이전에 먼저 생성된다.
따라서 자바스크립트 엔진은 함수 이름과 동일한 이름의 식별자를 암묵적으로 생성한다.
코드가 한 줄씩 순차적으로 실행되기 시작하는 런타임에는 “이미” 함수 객체가 생성되어 있고 함수 이름과 동일한 식별자에 할당까지 완료된 상태이다.
이처럼 함수 선언문이 코드의 선두로 끌어 올려진 것처럼 동작하는 자바스크립트 고유의 특징을 함수 호이스팅 이라고 한다.
console.log(add(2, 3));
function add(x, y) {
return x + y;
}
//자바스크립트 내부 동작
//런타임 이전에 등록
function add(x, y) {
return x + y;
}
console.log(add(2, 3));