자바스크립트는 다양한 형태의 함수를 지원한다. 이 글에서는 그 중 몇몇 주요한 함수의 형태에 대해 알아볼 예정이다.
즉시 실행 함수 (Immediately Invoked Function Expression)
즉시 실행 함수는 이름에서도 알 수 있듯이, 함수 정의와 동시에 즉시 실행된다. 이러한 함수는 주로 초기화 과정에서 한 번만 사용되며, 이후에는 다시 호출되지 않는다. 아래의 코드를 보며 이해해보자!
(function() {
var a = 3;
var b = 5;
return a + b;
})();
기명 함수로도 사용할 수 있지만, 함수 내부에서만 그 이름을 참조할 수 있다.
재귀함수 (Recursive Function)
재귀 함수는 그 이름처럼 함수 내부에서 자기 자신을 다시 호출하는 함수이다. 반복되는 처리, 예를 들면 팩토리얼 계산과 같은 작업을 표현할 때 유용하다.
function countdown(n) {
if (n <= 0) return;
console.log(n);
countdown(n-1);
}
중첩함수 (Nested Function)
중첩 함수는 함수 내부에 다른 함수를 정의하는 것을 말한다. 주로 외부 함수를 도와 작업을 수행하는 '헬퍼' 함수로 사용된다.
function outer() {
var x = 1;
function inner() {
var y = 2;
return x + y;
}
console.log(inner());
}
콜백함수 (Callback Function)
콜백 함수는 다른 함수의 인자로 전달되어 특정 조건 하에서 호출되는 함수를 의미한다. 비동기 작업 처리나 배열 메서드에서의 반복 처리 등에 사용된다.
function repeat(n, callback) {
for (var i = 0; i < n; i++) {
callback(i);
}
}
repeat(5, function(i) {
console.log(i);
});
순수함수와 비순수 함수
순수함수 (Pure Function): 동일한 입력에 대해 항상 동일한 출력을 반환하는 함수. 외부 상태에 의존하지 않으며, 외부 상태를 변경하지도 않는다.
비순수함수 (Impure Function): 외부 상태에 의존하거나 외부 상태를 변경하는 함수. 부수 효과가 있을 수 있다.