Dacă nu vă interesează valoarea de întoarcere a IIFE, aceasta ar putea fi oricare dintre următoarele:
!function(){}(); // => true~function(){}(); // => -1+function(){}(); // => NaN-function(){}(); // => NaN
Să explorăm puțin mai mult acest lucru.
Ambele funcționează la fel. Începe să devină interesant atunci când unuia dintre module îi lipsește un punct și virgulă la sfârșit:
Cu un punct și virgulă lipsă, fiecare set de paranteze încearcă să invoce imediat expresia precedentă. Aceasta ar fi valoarea de returnare a IIFE precedent.
Atunci diferența este atunci când apare TypeError. Haideți să verificăm ce fac argumentele. Observați că console.log()
returnează nedefinit:
Acum să facem același exemplu cu metoda Crockford:
Dar așteptați, nu există TypeError aici…
Nu există TypeError datorită funcției returnate. Funcția returnată care înregistrează argumentele este apoi invocată cu valoarea de retur a modulului2, care este nedefinită.Cu această înțelegere, să ne întoarcem la exemplul original, unde a existat o eroare de tip TypeError:
Concluzie
IIFE-urile (function{})();
și (function(){}());
pot acționa diferit în situația în care lipsește punctul și virgula.
Utilizați linter sau un instrument pentru a vă asigura că modulelor nu le lipsesc punct și virgulă la sfârșit atunci când lucrați cu modulele.
Pentru a fi mai siguri adăugați un punct și virgulă la IIFE: