IIFE (Immediately Invoked Function Expression) je speciální technika, která se používá k vytvoření a okamžitému volání anonymní funkce.
Běžná funkce může být zavolána kdekoliv v celé aplikaci, jenže v některých případech můžeme chtít přesně tomuto stavu zabránit. Můžeme tím předejít konfliktům mezi různými částmi kódu, pokud určitou část obsahu souboru obalíme funkcí, která vytváří vlastní jmenný prostor a díky tomu se vyhneme potenciálním kolizím názvů mezi různými moduly a knihovnami JavaScriptu. Jedná se o stále častější praxi, kterou využívá mnoho populárních knihoven JavaScriptu (jQuery, Node.js atd.).
IIFE se volají pomocí závorek "()" okolo anonymní funkce a dalších závorek "()" na konci, které ji volají. Syntax IIFE je následující:
(function(){
//kód, který se provede
})();
Argumenty
Můžete také předat argumenty do funkce pomocí závorek uvnitř kulatých závorek. Například:
(function(arg1, arg2) {
// kód funkce s argumenty arg1 a arg2
})('foo', 'bar');
Příklad
V předchozích dekádách, kdy lidé používali jQuery knihovnu, tak bylo obvyklé používat $
jako alias objektu jQuery.
Doporučovalo se veškerý jQuery kód zapouzdřit do IIFE.
(funkce($){
// privátní rozsah a použití $ bez obav z konfliktu
})(jQuery);
Zapouzdření
IIFE se často používá k zapouzdření proměnných a funkcí. Tedy k oddělení kódu do samostatného bloku, který je izolován od zbytku kódu a má vlastní jmenný prostor.
Běžná funkce v Javascriptu vytvoří svůj vlastní scope a je dostupné skrz svůj identifikátor v celém kódu po deklaraci. IIFE na druhou stranu uzavírá scope uvnitř své vlastní funkce a tím zajišťuje soukromí proměnných a funkcí deklarovaných uvnitř IIFE.
IIFE jsou často používány v kombinaci s tzv. "pure funkcemi", což jsou funkce, které nemají žádné side efekty a vždy vracejí stejný výsledek pro dané vstupy.