1. 즉시 실행 함수

함수 정의와 동시에 즉시 호출되는 함수로 단 한번만 호출되며 다시 호출할 수 없음

(function() {
    console.log('익명 즉시 실행함수! 함수 정의와 동시에 호출!');
})();

(function hello(name){
    console.log('기명 즉시 실행함수! 함수 정의와 동시에 호출!');
    console.log(`${name}님 안녕하세요!`);
})('홍길동');

익명 함수도 선언만 해서 호출되는 것이 아닌 뒤에 인자를 던져줘야 호출이 된다.

  1. 재귀 함수

함수가 자기 자신을 호출하는 것을 재귀호출이라고 함

// 팩토리얼 값을 구해보자
function factorial(n) {
    if(n <= 1) return 1;
    return n * factorial(n - 1);
}

console.log(factorial(1)); // 1! = 1
console.log(factorial(2)); // 2! = 2 * 1
console.log(factorial(3)); // 3! = 3 * 2 * 1
console.log(factorial(4)); // n! = n * (n-1) * (n-2) * ...

재귀 함수는 반복처리를 반복문 없이 구현할 수 있다는 장점이 있지만 무한 반복에 빠질 위험이 있고 이로 인해 스택 오버플로 에러를 발생시킬 수 있으므로 주의

  1. 중첩 함수

함수 내부에 정의 된 함수를 중첩 함수 또는 내부 함수라고 함

중첩 함수를 포함하는 함수를 외부 함수라고 한다.

일반적으로 중첩 함수는 자신을 포함하는 외부 함수를 돕는 헬퍼(helper) 함수의 역할을 함

function outer() {
    var outerVal = '외부 함수';

    function inner() {
        var innerVal = '내부 함수';
        console.log(outerVal, innerVal); // 외부 함수 내부 함수(출력)
    }

    inner();
}
  1. 콜백 함수(callback - function)