khellang/iffe.md

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:

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.