일반적인 함수는 선언된 함수 이름 뒤에 소괄호를 붙여서 함수를 실행하는데 때로는 함수가 선언된 순간에 바로 실행을 할 수도 있다.

즉시 실행 함수


(function () {
	console.log('바로 실행')
})();

함수 선언 부분을 소괄호로 감싼 다음에 바로 뒤에 함수를 실행하는 소괄호를 한 번 더 붙여주는 방식이다.

이렇게 코드를 작성하게 되면 선언되는 순간 바로 실행이 된다.

함수 선언과 동시에 즉시 실행되는 함수를 가리켜 즉시 실행 함수 라고 부르며

영어로 Immediately Invoked Function Expression, 줄여서 IIFE 라고 한다

(function (x, y){
	console.log(x + y)
})(3, 5) // 8

-----------------------

(function hi(){
	console.log('Hi')
})();

hi(); // ReferenceError

즉시 실행 함수도 일반 함수처럼 파라미터를 작성하고 함수 호출시 아규먼트를 전달할 수 있다.

이때 주의사항은 즉시 실행 함수는 함수에 이름을 지어줘도 외부에서는 재사용이 불가능하다.

따라서 일반적으로 즉시 실행 함수는 이름이 없는 익명 함수를 사용하지만

자기 자신을 호출하는 재귀함수를 사용할 떈 이름이 필요할 수 있다. 그렇기에 상황을 보면서 사용하는 것이 중요하다.

(function countdown(n) {
  console.log(n);
  if (n === 0) {
    console.log('End!');
  } else {
    countdown(n - 1);
  }
})(5);