function add (a, b) {
return a + b;
}
함수를 정의하는 가장 대표적인 방법이다. 다른 언어들도 함수 선언문으로 함수를 정의한다.
함수 선언문에서는 함수 이름을 생략할 수 없다.
// 함수 선언문에서 함수 이름이 없을 경우
function (a, b) {
return a + b;
}
// ❌ SyntaxError: Function statements require a function name
자바스크립트의 함수는 일급 객체다. 함수가 일급 객체라는 것은 함수를 값처럼 자유롭게 사용할 수 있다는 의미이다. 함수는 일급 객체이므로 함수 리터럴로 생성한 함수 객체를 변수에 할당할 수 있다.
출처: 모던 자바스크립트 딥다이브 p.163
var add = function (a, b) {
return a + b;
}
함수 표현식은 변수에 함수를 할당하는 방식으로 함수를 정의한다. → 자바스크립트에서는 함수가 일급 객체이기 때문에 가능한 것이다.
함수 표현식으로 만들어진 함수는 함수 이름을 생략하는 것이 일반적이다. 이렇게 이름이 없는 함수는 익명함수(anonymous function) 이라고 한다.
함수 생성 시점이 다르다
함수 호이스팅
이 발생하고, 함수 표현식에서는 변수 호이스팅
이 발생한다.함수 객체가 런타임 이전에 생성된다.
함수 호이스팅
)함수 객체가 런타임 이후 생성된다. → 함수 표현식 이전에 함수 표현식으로 정의된 함수를 호출하면 undefined
를 호출하는 것과 같아서 타입 에러가 발생한다.
var
로 선언된 변수는 undefined
로 초기화 된다. (변수 호이스팅
)모던 자바스크립트 딥다이브 p.158-166
Function | PoiemaWeb