이번 포스트에서는 다양한 함수의 형태에 대해 소개한다.
함수 정의와 동시에 즉시 실행하는 함수를 의미하며, 단 한번만 호출되고 다시 호출할 수 없다.
(function () {
const a = 3;
const b = 5;
return a + b
}());
즉시 실행함수는 반드시 그룹 연산자 (...)로 감싸야 한다.
즉시 실행함수는 변수나 함수 이름의 충돌을 방지할 수 있다.
재귀 함수는 재귀 호출(자기 자신 호출)을 하는 함수를 말한다. 함수 내부에서 함수 이름 혹은 함수를 가리키는 식별자로 재귀호출을 할 수 있다.
const factorial = function foo(n) {
if (n <= 1) return 1;
return n * factorial(n - 1);
}
console.log(factorial(5));
재귀 함수를 사용할 때에는 무한 호출되는것을 막기 위해 반드시 탈출 조건을 만들어야 한다.
함수 내부에 정의된 함수를 중첩함수 또는 내부함수라고 한다. 중첩함수는 외부 함수 내부에서만 호출할 수 있다.
function outer() {
const x = 1;
function inner() {
const y = 2;
console.log(x + y); // 3
}
inner();
}
outer();
-- 추후 추가 예정--
순수함수는 외부상태에 의존하지 않으며 외부상태를 변경하지 않는 함수이다. 이와 반대로, 비순수함수는 외부상태에 의존하거나 외부상태를 변경하는 함수이다.
순수 함수
const count = 0;
// 동일한 인수가 전달되면 항상 동일한 결과를 반환함
function increase(n) {
return ++n;
}
count = increase(count);
console.log(count) // 1
const = increase(count);
console.log(count) // 2
비순수 함수
const count = 0;
// 외부 변수인 count에 의존하며 외부 변수 상태를 변경한다.
function increase() {
return ++n;
}
increase();
console.log(count) // 1
increase();
console.log(count) // 2
함수형 프로그래밍은 순수 함수를 통해 부수 효과를 최대한 억제해 오류를 피하고 프로그램의 안정성을 높힌다.
자바스크립트는 멀티 패러다임 언어로, 객체지향 프로그래밍뿐만 아니라 함수형 프로그래밍도 적극 활용한다.