October 16, 2021
IIFE
)(name => {
console.log(`hello ${name}`);
})('heaeun'); // hello heaeun
위와같은 것을 즉시 실행 함수 표현(IIFE, Immediately Invoked Function Expression)이라고 하며, 함수를 정의함과 동시에 실행합니다
즉시 실행 함수는 반드시 그룹 연산자 ( ... )
로 감싸야 합니다.
만약 아래처럼 그룹 연산자로 감싸지 않고 실행하면 에러가 발생합니다
(name) => {
console.log(`hello ${name}`);
}('heaeun')
에러 발생 !
Uncaught SyntaxError: Unexpected token '('
👉🏻 에러가 발생하는 이유 ? (자바스크립트 딥다이브 12.7
참고)
함수 선언문 뒤의 (...)
는 함수 호출 연산자가 아니라 그룹 연산자
로 해석되기 때문입니다.
👉🏻 그룹 연산자로 함수 선언문을 감싸는 이유?
()
는 함수 호출 연산자로 해석됩니다IIFE
로 모든 코드를 감싸면 IIFE
안에 있는 모든 변수는 IIFE
의 지역 변수가 됩니다. 이러한 특성을 이용해 전역변수의 사용을 제한할 수 있습니다모듈패턴을 사용 하거나 스코프를 타이트하게 제한을 할 때 사용하던 문법입니다.
IIFE
로 감싸 하나의 모듈을 만드는 것최근에는 es6의 import 문법때문에 많이 사용되지는 않지만 async, await을 사용할때는 사용됩니다
function getUser() {
return new Promise(resolve => {
setTimeout(() => {
resolve('heaeun');
}, 3000);
});
}
(async () => {
const user = await getUser(); // promise를 반환하는 함수 앞에 await을 붙입니다.
console.log('user ? ', user); // 3초뒤에 heaeun이 찍힙니다.
})();
다른 모듈에서 공개한 식별자를 자신의 모듈 스코프 내부로 로드하려면
import
키워드를 사용합니다 (자바스크립트 딥다이브 참고 -48.3.3
)
즉시 실행 함수는 함수 블럭 단위로 지역 변수를 가지는 특성을 사용해 무분별한 전역 변수의 남발을 제한하는 하나의 방법이다