khellang/iffe.md

Hvis du er ligeglad med returværdien af IIFE’en, kan den være en af følgende:

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

Lad os undersøge dette lidt nærmere.

Både fungerer på samme måde. Det begynder at blive interessant, når et af modulerne mangler et afsluttende semikolon:

Med et manglende semikolon forsøger hvert sæt parenteser at straks-invokationere det foregående udtryk. Det ville være returværdien af den forudgående IIFE.

Så forskellen er, når TypeError opstår. Lad os tjekke, hvad argumenterne har gang i. Bemærk, at console.log() returnerer undefined:

Lad os nu lave det samme eksempel med crockford-måden:

Men vent, der er ingen TypeError her…

Der er ingen TypeError på grund af den returnerede funktion. Den returnerede funktion, der logger argumenterne, bliver så påberåbt med modul2’s returværdi, som er udefineret.Med denne forståelse kan vi gå tilbage til det oprindelige eksempel, hvor der var en TypeError:

Konklusion

De (function{})(); og (function(){}()); IIFE’er kan opføre sig forskelligt i situationen med manglende semikolon.

Brug linter eller et værktøj til at sikre, at der ikke mangler afsluttende semikolon i moduler, når du arbejder på moduler.

For at være ekstra sikker tilføjes et ledende semikolon til IIFE’en:

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.