함수 선언문이 자바스크립트 코드 제일 위 상단에 있는 것처럼 동작하는 것을 호이스팅 이라고 한다.
- 함수 표현식
var sub = function(x,y){ return x - y ; };
- 함수 선언문
function(x,y){ return x + y ; };
함수 선언문과 함수 표현식에 호이스팅은 약간의 차이가 있다.
//함수 참조
console.dir(add); // add(x,y)
console.dir(sub); // undefined
//함수 호출
console.log(add(3,4)); //7
console.log(sub(3,4)); // TypeError: sub is not a function
// 함수 선언문
function add(a,b){
return a + b;
}
// 함수 표현식
var sub = function(a,b){
return a - b
}
함수 선언문인 add는 선언문 이전에 호출될수있고 ,
함수 표현식은 표현식 이전에 호출 될 수 없다.
이유는 생성 시점이 다르기 때문이다.
함수 호이스팅과 변수 호이스팅은 공통점과 다른점이 있다.
함수 호이스팅과 변수 호이스팅
- 공통점 : 함수 선언문과 변수 선언문은 선언 이전에 자바스크립트 엔진에 의해 먼저 실행되어 식별자를 생성한다
- 차이점 : 하지만 var 키워드로 선언된 변수는 undefined로 초기화 되어진다.
함수 표현식은 변수 선언문 + 변수 할당문을 축약한 표현과 동일하게 동작함으로 함수 표현식으로 함수를 정의하면 함수 호이스팅이 발생하는 것이 아니라 변수 호이스팅이 발생하게 된다.