함수 정의와 동시에 즉시 호출되는 함수를 즉시 실행함수(IIFE, Immediately Invoked Function Expression)라고 한다.
즉시 실행 함수는 단 한 번만 호출되며 다시 호출할 수 없다.
// 익명 즉시 실행 함수
//(function(){}())
(function () {
let a = 3;
let b = 5;
return a * b;
})();
즉시 실행함수는 익명함수를 사용하는 것이 일반적이나 이름이 있는 즉시 실행 함수도 가능하다. 하지만 이 역시 다시 호출할 수는 없다.
//기명 즉시 실행 함수
(function foo(){
let a = 3;
let b = 5;
return a * b;
}())
foo() //referencError : foo is not defined
💡 즉시 실행 함수는 반드시 그룹 연산자 (...)
로 감싸야 한다.
→ 익명 즉시 함수의 경우 함수 선언문 형식에 맞지 않기 때문에 에러가 발생한다.
→ 기명 즉시 함수의 경우 자바스크립트 엔진이 암묵적으로 수행하는 세미콜론 자동 삽입 기능에 의해 함수 선언문이 끝나는 위치에 ‘;’ 이 암묵적으로 추가하기 떄문에 에러가 발생한다.
그룹 연산자의 피연산자는 값으로 평가되므로 기명 또는 익명 함수를 그룹 연산자로 감싸면 함수 리터럴로 평가되어 함수 객체가 된다.
즉 그룹 연산자로 함수를 묶은 이유는 먼저 함수 리터럴을 평가해서 함수 객체를 생성하기 위해서다.
💡 즉시 실행 함수를 쓰는 이유?
👉 즉시 실행 함수 내에 코드를 모아 두면 변수나 함수 이름의 충돌을 방지할 수 있다. 즉 모든 코드를 즉시 실행 함수로 감싸면 모든 변수는 즉시 실행 함수의 지역 변수가 된다. 이 방법을 사용하면 전역 변수를 생성하지 않으므로 라이브러리 등에 자주 사용된다.