khellang/iffe.md

Ha nem érdekel az IIFE visszatérési értéke, akkor a következők bármelyike lehet:

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

Vizsgáljuk meg ezt egy kicsit jobban.

Mindkettő ugyanúgy működik. Akkor kezd érdekessé válni a dolog, amikor az egyik modulból hiányzik az utolsó pontosvessző:

A hiányzó pontosvesszővel minden egyes zárójelcsoport megpróbálja azonnal megidézni az előző kifejezést. Ez lenne az előző IIFE visszatérési értéke.

A különbség tehát az, amikor a TypeError bekövetkezik. Nézzük meg, mire készülnek az argumentumok. Figyeljük meg, hogy a console.log() undefined visszatér:

Most csináljuk ugyanezt a példát a crockfordi módon:

De várjunk csak, itt nincs TypeError…

Nincs TypeError a visszaadott függvény miatt. A visszaadott függvényt, amely az argumentumokat naplózza, a modul2 visszatérési értékével hívják meg, ami nem definiált.Ezzel a megértéssel térjünk vissza az eredeti példához, ahol TypeError volt:

Következtetés

A (function{})(); és (function(){}()); IIFE-k eltérően viselkedhetnek a hiányzó pontosvessző szituációban.

A modulokkal való munka során használj lintert vagy egy eszközt, hogy megbizonyosodj arról, hogy a modulokból nem hiányzik az utolsó pontosvessző.

Az extra biztonság kedvéért adj hozzá egy vezető pontosvesszőt az IIFE-hez:

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.