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 auswertet und undefined
zurückgibt. (Siehe MDN )
Ich frage mich, warum wir Wrapping-Funktionen in Parens bevorzugen, anstatt void
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 console.log
aufruft. Die übliche Problemumgehung dafür besteht darin, Ihr Modul mit !(function (){})();
zu deklarieren, wodurch der zurückgegebene Wert zu einem booleschen Wert wird.
Wenn Sie jedoch void
verwenden möchten, wie:
Die verkettete Datei ist immer noch falsch, aber Sie werden den Fehler beim ersten Lauf bemerken, daher leichter bemerkt. Siehe unten.
%Vor% Dies wirft Unexpected token void
. Was die Module betrifft, glaube ich, dass !(function(){}()
und void function(){}()
denselben Effekt erzielen. Aber ich denke, dass void
sauberer (subjektiver) aussieht, als wenn man eine Funktion mit params umschließt und !
darauf vorstellt.
Ich vermisse etwas? Wäre es nicht besser, wenn wir void
verwenden?
Nun, viele JavaScript-Programmierer denken, dass void
verwirrend und überflüssig ist, besonders Douglas Crockford, der es als eines der " Schlechte Teile " von JavaScript.
Das Voranstellen einer Funktionsdefinition mit void
kann besonders verwirrend sein. In Sprachen wie C ++ bedeutet dies "Dies ist eine Art von Funktion, die keinen Wert zurückgibt." In JavaScript definiert void
nichts; Stattdessen wertet es die Funktion (oder einen anderen Ausdruck) aus und gibt den Wert undefined
zurück. Sie sehen es nicht viel in JavaScript-Code.
Weitere Informationen zur Verwendung von !
vor Modulen finden Sie in dieser StackOverflow-Antwort .
Lesen Sie auch den Blogbeitrag von Ben Allman zu IIFE .
Tags und Links javascript iife