(function() { statements; })();
첫 번째 소괄호(''**()**'', Grouping Operator)로 둘러싸인 익명함수(Anonymous Function) ⇒ 전역 스코프에 불필요한 변수를 추가해서 오염시키는 것을 방지하고, IIFE 내부로 다른 변수들이 접근하는 것을 받지
두 번째 소괄호 부분은 즉시 실행 함수를 생성하는 소괄호이다. 이를 통해 자바스크립트 엔진은 함수를 즉시 해석해서 실행한다.
아래 함수는 즉시 실행되는 함수 표현이다. 표현 내부의 변수는 외부로부터의 접근이 불가능하다
(function () { var aName = "Barry"; })(); // IIFE 내부에서 정의된 변수는 외부 범위에서 접근이 불가능하다. aName; // Uncaught ReferenceError: aName is not defined
IIFE를 변수에 할당하면 IIFE 자체는 저장되지 않고, 함수가 실행된 결과만 저장된다.
var result = (function () { var name = "Bruce Willis"; return name; })(); // 즉시 결과를 생성한다. console.log(`result is ${result}`); // result is Bruce Willis
선언한 함수를 아래와 같은 방식으로는 즉시 호출될 수 없다
function foo() { console.log('Hello Foo'); }(); // Uncaught SyntaxError: Unexpected token ')'
하기와 같은 기명 또는 익명 함수 표현식은 즉시 호출될 수 있다.
(function foo() { console.log("Hello Foo"); // Hello Foo }()); // VS Code에서는 }());라고 입력하여도 자동으로 })();으로 변경됨 (function food() { console.log("Hello Food"); // Hello Food })(); (() => console.log("Hello World~~~~~"))(); // Hello World~~~~~
구분 | 괄호 | 영문 |
---|---|---|
소괄호 | ( ) | Square brackets |
중괄호 | { } | Curly brackets, Curly braces |
대괄호 | [ ] | Parentheses |
홑화살괄호 | < > | Angle brackets |