iife

___ tag123javascript ___ JavaScript (nicht zu verwechseln mit Java) ist eine dynamische Sprache mit mehreren Paradigmen auf hoher Ebene, die sowohl für das clientseitige als auch für das serverseitige Scripting verwendet wird. Verwenden Sie dieses Tag für Fragen zu ECMAScript und seinen verschiedenen Dialekten / Implementierungen (außer ActionScript und Google-Apps-Script). ___ qstntxt ___

Die übliche Vorgehensweise beim Erstellen von Modulen besteht darin, sie in Parens zu verpacken, damit Sie keine Variablen außerhalb des Moduls verlieren (beim Verketten usw.).

Es gibt auch %code% operator, der einen gegebenen Ausdruck auswertet und %code% zurückgibt. (Siehe MDN )

Ich frage mich, warum wir Wrapping-Funktionen in Parens bevorzugen, anstatt %code% zu verwenden. Ist es historisch, ist es etwas, das mit der Verkettung zusammenhängt, sonst?

Ich weiß, dass Sie Probleme mit der Verkettung haben können, wenn einer der Dateien ein Semikolon fehlt, was zu unangenehmen Problemen führt, bis Sie es bemerken.

Beispiele

Sagen Sie, module1.js (bemerken Sie das fehlende Komma):

%Vor%

und, module2.js:

%Vor%

Wenn Sie diese Skripte zu einem Bundle zusammenfügen, wird folgendes erzeugt:

%Vor%

Da beide Module (Dateien) eine Funktion zurückgeben, wird der zweite, angeblich IIFE, ein Aufruf des Rückgabewerts des ersten Moduls , was effektiv %code% aufruft. Die übliche Problemumgehung dafür besteht darin, Ihr Modul mit %code% zu deklarieren, wodurch der zurückgegebene Wert zu einem booleschen Wert wird.

Wenn Sie jedoch %code% verwenden möchten, wie:

%Vor%

Die verkettete Datei ist immer noch falsch, aber Sie werden den Fehler beim ersten Lauf bemerken, daher leichter bemerkt. Siehe unten.

%Vor%

Dies wirft %code% . Was die Module betrifft, glaube ich, dass %code% und %code% denselben Effekt erzielen. Aber ich denke, dass %code% sauberer (subjektiver) aussieht, als wenn man eine Funktion mit params umschließt und %code% darauf vorstellt.

Ich vermisse etwas? Wäre es nicht besser, wenn wir %code% verwenden?

    
___ qstnhdr ___ Unterschied zwischen der Verwendung von void vs. Umbruch in Parens für IIFE void function () vs (function ()) ___ answer30315894 ___

Nun, viele JavaScript-Programmierer denken, dass %code% verwirrend und überflüssig ist, besonders Douglas Crockford, der es als eines der " Schlechte Teile " von JavaScript.

Das Voranstellen einer Funktionsdefinition mit %code% kann besonders verwirrend sein. In Sprachen wie C ++ bedeutet dies "Dies ist eine Art von Funktion, die keinen Wert zurückgibt." In JavaScript definiert %code% nichts; Stattdessen wertet es die Funktion (oder einen anderen Ausdruck) aus und gibt den Wert %code% zurück. Sie sehen es nicht viel in JavaScript-Code.

Weitere Informationen zur Verwendung von %code% vor Modulen finden Sie in dieser StackOverflow-Antwort .

Lesen Sie auch den Blogbeitrag von Ben Allman zu IIFE .

    
___ tag123ife ___ In einem Javascript steht ein IIFE für einen sofort aufgerufenen Funktionsausdruck: ein Funktionsausdruck, der sofort aufgerufen wird, nachdem er definiert wurde, z. B. (function () {/ * code * /}) (); ___
2
Antworten

IIFE in AngularJS

Ich habe eine Funktion in meinem Controller wie folgt spezifiziert: %Vor% Ich möchte, dass diese Funktion ausgelöst wird, wenn eine Auswahlbox geändert wurde. Daher wende ich ng-change auf das select-Element wie folgt an: %Vor% Aber ich...
03.09.2014, 12:57
1
Antwort

Unterschied zwischen der Verwendung von void vs. Umbruch in Parens für IIFE void function () vs (function ())

Die übliche Vorgehensweise beim Erstellen von Modulen besteht darin, sie in Parens zu verpacken, damit Sie keine Variablen außerhalb des Moduls verlieren (beim Verketten usw.). Es gibt auch void operator, der einen gegebenen Ausdruck auswe...
03.03.2015, 09:35