khellang/iffe.md

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:

Lasă un răspuns

Adresa ta de email nu va fi publicată.