Web Dev/JavaScript :: 자바스크립트
[JavaScript] IIFE 란? 어떻게 읽을까?
HJPlumtree
2021. 3. 15. 21:13
IIFE(immediately invoked function expression) '이삐(iffy)' 라고 읽는다
function delaration: 함수 이름을 주는 '보통' 방법
function myFunction () { }
function expression: 변수나 프로퍼티에 함수를 넣어주는 방법
// 변수에 function expression 넣어주기
var myFunction = function () { /* logic here */ };
// 프로퍼티에 function expression 넣어주기
var myObj = {
myFunction: function () { /* logic here */ }
};
이런것도 function expression 이라고 부른다
// 괄호안에도 expression
(function () { /* logic here */ });
// 반대 오퍼레이터 뒤에도 expression
!function () { /* logic here */ };
function expression 메인 일은, 값을 리턴하는 것 위의 값 모두 리턴값은 '함수'다
바로 실행하고 싶으면 뒤에 괄호를 넣어주면 된다.
(function () {
// logic here
})();
IIFE 사용하는 주목적은 데이터 보안을 위함.
IIFE 안에 선언한 변수는 바깥에서 액세스할 수 없다
이렇게 말이다
(function () {
var foo = "bar";
// Outputs: "bar"
console.log(foo);
})();
// ReferenceError: foo is not defined
console.log(foo);
물론 이렇게 함수 이름을 주고, 실행해도 같은 결과가 나온다
하지만 여기에 단점이 있다,
- 글로벌 이름 공간을 하나 잡아먹은것
- 이름의 충돌 가능성을 증가시킨거
function myImmediateFunction () {
var foo = "bar";
// Outputs: "bar"
console.log(foo);
}
myImmediateFunction();
// ReferenceError: foo is not defined
console.log(foo);
IIFE에 쉽게 arguments를 넣어줄 수도 있다
var foo = "foo";
(function (innerFoo) {
// Outputs: "foo"
console.log(innerFoo);
})(foo);
원문: An Introduction to IIFEs - Immediately Invoked Function Expressions - A Drip of JavaScript