Pokud vás nezajímá návratová hodnota IIFE, může to být některá z následujících možností:
!function(){}(); // => true~function(){}(); // => -1+function(){}(); // => NaN-function(){}(); // => NaN
Prozkoumejme to trochu více.
Oboje funguje stejně. Zajímavé to začíná být, když v jednom z modulů chybí koncový středník:
Při chybějícím středníku se každá sada paren snaží okamžitě vyvolat předchozí výraz. Tím by byla návratová hodnota předchozího IIFE.
Takže rozdíl je v tom, kdy dojde k TypeError. Podívejme se, co mají argumenty za lubem. Všimněte si, že console.log()
vrací undefined:
Nyní provedeme stejný příklad crockfordovským způsobem:
Ale počkejte, tady žádná TypeError není…
Díky vracené funkci žádná TypeError není. Vrácená funkce, která zaznamenává argumenty, se pak volá s návratovou hodnotou modulu2, která je nedefinovaná.“ S tímto vědomím se vraťme k původnímu příkladu, kde došlo k TypeError:
Závěr
V situaci chybějícího středníku se mohou IIFE (function{})();
a (function(){}());
chovat různě.
Při práci s moduly používejte linter nebo jiný nástroj, abyste se ujistili, že v modulech nechybí koncový středník.
Pro větší jistotu přidejte do IIFE úvodní středník: