Skip to content
On this page

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

LINKS TO THIS PAGE