Code note/자바스크립트
자바스크립트 즉시 실행 함수 IIFE
코드노트
2022. 12. 6. 21:06
즉시 실행 함수 (Immediately Invoked Function Expression)
- 함수 정의와 동시에 즉시 호출되는 함수
- 단 한번만 호출 되며 다시 호출할 수 없다.
* 즉시 실행 함수는 ( ... ) 감싸주어야 한다. 그렇지 않으면 Error가 발생한다. 그리고 그 뒤에 ()를!
function () {...}(); // SyntaxError: Function statements require a function name
- 만약 (...)로 감싸주지 않으면 선언문 형식에도 맞지 않기 때문이다.
??? 그럼 기명함수로 호출하게 되면 Error가 발생하지 않을까?
function foo() {...}(); // SyntaxError: Unexpected token ')'
// function foo() {...};();
- 그래도 Error가 발생하는걸 볼 수 있다. / 자바스크립트 엔진이 암묵적으로 세미콜론을 자동 삽입하여 Error가 발생한다.
- 그룹 연산자의 피연산자는 값으로 평가되므로 함수 선언문, 함수 표현식을
그룹 연산자로 감싸면 함수 리터럴로 평가되어 함수 객체가 된다.
* 그외에도 먼저 함수를 평가하여 함수 객체를 생성할 수 있다면 !, + ... 연산자를 사용할 수 있다.
익명 - 즉시 실행 함수
// 익명 즉시 실행 함수
console.log(
(function () {
let a = 3;
let b = 5;
return a * b;
})()
); // 15
- 즉시 실행 함수는 익명함수를 사용하는것이 일반적이다. 그 이유는? 기명-즉시 실행 함수를 살펴보자!
기명 - 즉시 실행 함수
// 익명 즉시 실행 함수
(function foo() {
let a = 3;
let b = 5;
return a * b;
})();
console.log(foo()); // ReferenceError: foo is not defined
- 즉시 실행 함수는 단 한번 호출된다고 했다.
- 그리고 foo() 함수는 식별자로 함수 내부에서만 사용가능하다. 선언문이 아니다.
- 그렇기 때문에 즉시 실행 함수를 만들때는 함수이름을 사용하지 않아도 된다.
* 만약 재귀함수를 만든다고 하면 식별자가 필요하기 때문에 기명함수로 만들어야 한다.
(function(a, b) {
return a * b;
}(3, 5)); // 15
- 인수를 전달하여서 사용할 수도 있다.