khellang/iffe.md

Wenn man sich nicht um den Rückgabewert des IIFE kümmert, könnte es einer der folgenden sein:

!function(){}(); // => true~function(){}(); // => -1+function(){}(); // => NaN-function(){}(); // => NaN

Lassen Sie uns das ein wenig genauer untersuchen.

Beide funktionieren gleich. Interessant wird es, wenn in einem der Module ein Semikolon am Ende fehlt:

Bei einem fehlenden Semikolon versucht jeder Satz von Parens, den vorangehenden Ausdruck sofort aufzurufen. Das wäre der Rückgabewert des vorangehenden IIFE.

Der Unterschied besteht also darin, wann der TypeError auftritt. Schauen wir uns an, was die Argumente bewirken. Beachten Sie, dass console.log() undefiniert zurückgibt:

Lassen Sie uns nun dasselbe Beispiel mit der Crockford-Methode durchführen:

Aber warten Sie, hier gibt es keinen TypeError…

Es gibt keinen TypeError wegen der zurückgegebenen Funktion. Die zurückgegebene Funktion, die die Argumente protokolliert, wird dann mit dem Rückgabewert von module2 aufgerufen, der undefiniert ist.

Fazit

Die (function{})(); und (function(){}()); IIFEs können sich in der Situation des fehlenden Semikolons unterschiedlich verhalten.

Verwenden Sie Linter oder ein Tool, um sicherzustellen, dass bei der Arbeit an Modulen keine Semikolons am Ende fehlen.

Um besonders sicher zu sein, fügen Sie ein führendes Semikolon zum IIFE hinzu:

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.