즉시 호출되는 익명 JavaScript 함수의 용어는 무엇입니까?


29

팀을위한 JavaScript 스타일 가이드를 작성하여 문서를보다 쉽게 ​​구성하고 제공 할 수 있습니다. 그러나 나는 내 질문이 적용되는 작은 충돌에 부딪쳤다.

즉시 호출되는 익명의 JavaScript 함수를 호출해야합니다. 나는 그것을 단순히 "익명 함수"라고 부를 수 있다는 것을 알고 있지만, 그것이 즉시 호출된다는 사실을 강조하고 싶습니다.

예를 들면 다음과 같습니다.

var MyVariable = (function(data){
  return "another value"
})("some value"); 

console.log(MyVariable);
// "another value"

1
이 구조는 종종 "
AakashM

답변:


39

그들은 이미 Javascript 세계에서 그 용어를 가지고 있습니다. 이를 IIFE (Immediately Invoked Function Expressions)라고 합니다.

그것은 무엇인가

IIFE 기능에는 이름이 없습니다. 대신, 통역사가 그들을 만나면 한 번 실행됩니다.

var area = function() {
    var width = 3;
    var height = 2;
    return width * height;
}();

최종 괄호 코드 블록의 닫는 중괄호 후 즉시 기능 식을 호출하는 인터프리터를 말한다.

당신이 작성하는 경우 함수 선언 은 추가해야합니다 사업자 그룹화 기능을 주위, 또는 괄호를 바로 호출 할 수있는 표현으로 기능을 처리하는 인터프리터에게 :

var area;
(function() {
    var width = 3;
    var height = 2;
    area = width * height;
}());


그들이 사용될 때

IIFE는 반복적으로 호출되지 않고 작업 내에서 한 번만 실행하면되는 코드에 사용됩니다.

  1. 함수를 호출 할 때 인수로 사용 (값 계산 등)
  2. 속성 값을 객체에 할당합니다.
  3. 이벤트 핸들러 및 리스너에서.
  4. 동일한 변수 이름을 사용하는 두 스크립트 간의 충돌을 방지합니다. 변수 이름이 같은지 확실하지 않은 다른 스크립트에서 코드를 삭제하기 위해 래퍼로 사용할 수 있습니다.

하나의 nitpick :을 사용하는 예제에서는 var area = ...함수의 "래핑"괄호가 필요하지 않습니다. 왜냐하면 함수의 오른쪽에 있기 때문에 이미 함수 표현식 이기 때문 =입니다. 랩핑 괄호는 함수가 함수 선언으로 작성된 경우에만 필요합니다 (예 : 선행 var area = ...).
Eric King

@EricKing 내가 제대로 했습니까?
Lawrence Aiello

이 '표현 함수'를 더 부담없이 호출 할 수 있다면 좋을 것입니다.
스트레이너

@LawrenceAiello 나는 내가 의미하는 것을 보여주기 위해 편집을 추가했습니다. 잘만되면 그것은 여전히 ​​당신을 위해 작동합니다.
Eric King

관련 질문으로, 질문에 표시된 것처럼 IIFE에 논쟁을 전달할 이유가 있습니까? 나는 인수가없는 (어떤 인수가 로컬 변수 일 수 있기 때문에) 당신이 보여주는 방법과 같은 것을 보았습니다.
Kat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.