Was ist der Begriff für eine anonyme JavaScript-Funktion, die sofort aufgerufen wird?

29

Ich schreibe einen JavaScript-Styleguide für mein Team, damit wir unsere Dokumente einfacher organisieren und beitragen können. Aber ich habe eine kleine Beule getroffen, auf die meine Frage zutrifft ...

Wie soll ich eine anonyme JavaScript-Funktion aufrufen, die sofort aufgerufen wird? Ich weiß, ich könnte es ganz einfach "anonyme Funktion" nennen, aber ich möchte die Tatsache betonen, dass es sofort aufgerufen wird.

Hier ist ein Beispiel:

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

console.log(MyVariable);
// "another value"
silentBeep
quelle
1
Beachten Sie, dass Sie dieses Konstrukt häufig (ungenau) als "selbstaufrufende Funktion" bezeichnen werden
AakashM

Antworten:

39

In der Javascript-Welt gibt es dafür bereits einen Begriff. Sie werden als sofort aufgerufene Funktionsausdrücke (IIFE) bezeichnet .

Was es ist

IIFE-Funktionen erhalten keinen Namen. Stattdessen werden sie einmal ausgeführt, wenn der Interpreter auf sie stößt:

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

Die letzten Klammern nach der schließenden geschweiften Klammer des Codeblocks weisen den Interpreter an, den Funktionsausdruck sofort aufzurufen.

Wenn Sie eine Funktionsdeklaration schreiben , müssen Sie Gruppierungsoperatoren oder Klammern um die Funktion hinzufügen , um den Interpreter anzuweisen, die Funktion als Ausdruck zu behandeln, der sofort aufgerufen werden kann:

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


Wenn sie benutzt werden

IIFEs werden für Code verwendet, der nur einmal innerhalb einer Task ausgeführt werden muss, anstatt wiederholt aufgerufen zu werden.

  1. Als Argument beim Aufruf einer Funktion (zur Berechnung von Werten etc.)
  2. So weisen Sie einem Objekt den Wert einer Eigenschaft zu
  3. In Eventhandlern und Listenern.
  4. Verhindert Konflikte zwischen zwei Skripten, die möglicherweise dieselben Variablennamen verwenden. Sie können als Wrapper verwendet werden, um Code in einem anderen Skript abzulegen, bei dem Sie nicht sicher sind, ob Variablennamen identisch sind.
Lawrence Aiello
quelle
Ein Trottel: In Ihrem Beispiel var area = ...brauchen Sie die "umschließenden" Klammern für die Funktion nicht, da es sich bereits um einen Funktionsausdruck handelt , da es sich auf der rechten Seite der befindet =. Die umschließenden Klammern werden nur benötigt, wenn die Funktion als Funktionsdeklaration (dh ohne führende Zeichen var area = ...) geschrieben ist.
Eric King
@EricKing habe ich es richtig gemacht?
Lawrence Aiello
Es könnte schön sein, diese "Expressfunktionen" beiläufiger nennen zu können
Sieb
@LawrenceAiello Ich habe eine Bearbeitung hinzugefügt, um zu zeigen, was ich meinte. Hoffentlich funktioniert es immer noch für Sie.
Eric King
Gibt es als verwandte Frage einen Grund, der IIFE ein Argument zu übermitteln, wie die Frage zeigt? Ich habe diese nur so gesehen, wie Sie demonstrieren - ohne Argumente (da jedes Argument eine lokale Variable sein kann).
Kat