코드노트

자바스크립트 즉시 실행 함수 IIFE 본문

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

- 인수를 전달하여서 사용할 수도 있다.