함수 표현식 vs. 함수 선언문 (Function Expression vs. Function Declaration)
1. 문법에서의 차이
다음은 함수 선언문이다.
// 함수 선언문은 독자적인 구문 형태로 존재한다.
function sum(a, b) {
return a + b;
}
그리고 다음은 함수 표현식이다.
// 함수 표현식은 표현식(Expression)이나 구문 구성(Syntax construct) 내부에 생성된다.
let sum = function (a, b) {
return a + b;
};
2. 언제 함수를 생성하는지의 차이
- 함수 표현식은 실제 실행 흐름이 해당 함수에 도달했을 때 함수를 생성한다. 따라서 실행 흐름이 함수에 도달하고 나서야 해당 함수를 사용할 수 있다.
- 함수 선언문은 선언문이 정의되기 전에도 호출할 수 있다.
3. 스코프에서의 차이
strict
모드에서 함수 선언문이 코드 블록 내에 위치하면 해당 함수는 블록 내 어디서든 접근할 수 있다. 하지만 블록 밖에서는 함수에 접근하지 못한다.
그래서 둘 중에 무엇을 써야하는가???
일반적으로는 함수 선언문을 통해 함수를 만드는 것이 먼저 고려된다. 다음과 같은 장점이 있다.
- 함수가 선언되기 이전에 호출할 수 있어 코드 구성을 좀 더 자유롭게 할 수 있다.
- 가독성 측면에서 조금 더 유리하다.
하지만 무조건적인 정답은 아니므로, 경우에 따라 필요한 경우 함수 표현식을 사용해야 한다.