khellang/iffe.md

Se non ti interessa il valore di ritorno dell’IIFE, potrebbe essere uno qualsiasi dei seguenti:

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

Esploriamo un po’ di più.

Entrambi lavorano allo stesso modo. Comincia a diventare interessante quando a uno dei moduli manca il punto e virgola finale:

Con un punto e virgola mancante, ogni serie di parentesi sta cercando di evocare immediatamente l’espressione precedente. Questo sarebbe il valore di ritorno del precedente IIFE.

Quindi la differenza è quando avviene il TypeError. Controlliamo quali sono gli argomenti. Notate che console.log() restituisce undefined:

Ora facciamo lo stesso esempio con il metodo Crockford:

Ma aspettate, non c’è nessun TypeError qui…

Non c’è nessun TypeError a causa della funzione restituita. La funzione restituita che registra gli argomenti viene quindi invocata con il valore di ritorno di module2, che è indefinito.Con questa comprensione, torniamo all’esempio originale, dove c’era un TypeError:

Conclusione

Le (function{})(); e (function(){}()); IIFE possono agire diversamente nella situazione del punto e virgola mancante.

Utilizza linter o uno strumento per assicurarti che ai moduli non manchi il punto e virgola finale quando lavori sui moduli.

Per essere più sicuro aggiungi un punto e virgola iniziale all’IIFE:

Lascia un commento

Il tuo indirizzo email non sarà pubblicato.