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

8

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.

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 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:

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

    
Umur Kontacı 03.03.2015, 09:35
quelle

1 Antwort

4

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 .

    
jkdev 19.05.2015 02:46
quelle

Tags und Links