function sum(a, b) {
return a + b;
}
sum
변수에 익명함수가 할당 되어 있다.var sum = function() {
return a + b;
}
()
가 있으면 실행의 의미이다. IIFE(Imemediately-invoked function expression)는 정의된 즉시 실행되는 자바스크립트 함수이다.
간단하게 말하면 주로 private scope를 만들기 위해 IIFE를 사용한다.
즉, 함수 내에서 변수를 선언해 함수의 스코프를 함수 내로 제한하고 즉시 함수를 실행시키면서 함수명에 의한 호이스팅(함수 선언식 사용 시)이나 전역 변수 오염을 막음으로서 예상치 못한 버그, 에러 등을 예방할 수 있다.
ES6 이전에는 모듈화를 할 때 IIFE 패턴을 많이 사용했다고 한다.
()
안에 익명함수를 선언하고 ()
를 밖에 사용해 즉시 실행한다.(function() {
console.log('IIFE');
})();
(()=> {
console.log('IIFE arrow function')
})()
()
로 감싸야한다. function() {
console.log('no wrapping parentheses')
}() // error
()
가 내부에 있다.(function() {
console.log('IIFE');
});
(()=> {
console.log('IIFE arrow function')
}())
(function callIIFE() {
console.log('named IIFE');
})();
이 부분이 가장 의문이었다. 이전에 IIFE에 대해 처음 알게되었을 때 ES6의 등장으로 잘 사용할 일이 없다는 글을 보았었다.
하지만 어디에나 레거시 코드가 있고 괄호()로 감싸져있는 함수를 볼 때마다 낯설게만 느껴졌다.
현 직장의 코드에서는 IIFE를 본 적이 없으나 비슷한 개념으로 사용하고 있는 부분들이 있어서 처음 해당 코드를 볼 때 IIFE가 생각나지 않아 한참이나 헤맸었다.
게다가 검색을 하다보면 IIFE를 사용한 코드 예시가 아주 드물지만 있어서 뭔지는 알아야겠다고 생각했다.
과거와 항상 함께하는 한 알아야할 지식이라고 생각한다.