Om du inte bryr dig om IIFE:s returvärde kan det vara något av följande:
!function(){}(); // => true~function(){}(); // => -1+function(){}(); // => NaN-function(){}(); // => NaN
Vi kan utforska det här lite mer.
Båda fungerar på samma sätt. Det börjar bli intressant när en av modulerna saknar ett avslutande semikolon:
Med ett saknat semikolon försöker varje uppsättning parens att omedelbart framkalla det föregående uttrycket. Det skulle vara returvärdet av den föregående IIFE:
Så skillnaden är när TypeError inträffar. Låt oss kontrollera vad argumenten har för avsikt att göra. Notera att console.log()
returnerar undefined:
Nu gör vi samma exempel med crockfordmetoden:
Men vänta, det finns inget TypeError här…
Det finns inget TypeError på grund av den returnerade funktionen. Den returnerade funktionen som loggar argumenten blir sedan anropad med returvärdet för module2, vilket är odefinierat. med den förståelsen går vi tillbaka till det ursprungliga exemplet, där det fanns ett TypeError:
Slutsats
De (function{})();
och (function(){}());
IIFE:erna kan agera på olika sätt i situationen med det saknade semikolonet.
Använd linter eller ett verktyg för att se till att moduler inte saknar avslutande semikolon när du arbetar med moduler.
För att vara extra säker lägg till ett inledande semikolon till IIFE: