자바스크립트에서 함수를 정의하는 두 가지 방법과 그 차이점을 알아보자.
함수 선언식은 이름이 있는 함수이다. 자바스크립트 엔진이 코드를 실행하기 전에 메모리에 로드하기 때문에 호이스팅이 발생한다.
// 함수 선언보다 호출이 먼저 와도 정상 작동
console.log(add(2, 3)); // 5
function add(a, b) {
return a + b;
}
특징
함수 표현식은 변수에 익명 함수를 할당하는 방식이다. 변수에 할당된 이후에만 호출이 가능하다.
// 함수 표현식 선언 전 호출 시 에러 발생
console.log(multiply(2, 3)); // Reference Error!
const multiply = function (a, b) {
return a * b;
};
특징
| 구분 | 함수 선언식 | 함수 표현식 |
|---|---|---|
| 호이스팅 | O | X |
| 선언 전 호출 | 가능 | 불가능 |
| 유연성 | 낮음 | 높음 |
함수 선언식은 호이스팅으로 인해 코드의 어디서든 호출이 가능하지만, 함수 표현식은 변수에 할당된 후에만 사용할 수 있다.