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.
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?
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 .