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: