Immediately Invoked Function Expression
Immediately Invoked Function Expression
Immediately Invoked Function Expression
, 줄여서 IIFE는 즉시 실행 함수 표현의 줄임말이다. 이는 정의와 동시에 실행되는 함수를 뜻한다.
용도
Function Literal을 ()
로 감싸 바로 실행시킨다.
보편적으로 전역 스코프를 오염시키지 않기 위해 사용하는 경우가 많다.
(function() {console.log('Hello World!');})();
이 코드는 즉시 평가하여 실행하기 때문에 스코프를 오염시키지 않는다.
이유
function() {}
위와 같이 선언하면 파서는 함수 선언문(statement)으로 인식하기 때문에 해석기에 명령을 지시하고 끝내기 때문에 값으로 남지 않는다.
그래서 ()
로 묶어주어 Function Literal로 명시적으로 선언해준다.
그 외 다음과 같이 연산자를 앞에 붙여줄 경우 즉시 실행된다.
!function(a, b) { return console.log(a + b) }(1, 2)void function(a, b) { return console.log(a + b) }(1, 2)/* ...그 외 다른 연산자들 */
보통은 위와 같이 ()
로 묶는 표현 방식을 사용한다.
만일 앞의 구문에 ;
가 없어 묶여서 값으로 평가되는 것을 막기 위해(Automatic Semicolon Insertion) 다음과 같이 사용하기도 한다.
;(function(a, b) { return console.log(a + b) })(1, 2)
Arrow Function과 IIFE
화살표 함수 =>
는 연산자가 아니라 파싱이 특별하게 취급되기 때문에 ()
로 묶는 방법 이외에는 동작하지 않는다.
((a, b) => a + b)(1, 2) // 3!(a, b) => a + b)(1, 2) // Uncaught SyntaxError: Malformed arrow function parameter list