IIFE – Immediately Invoked Function Expression jest anonimową funkcją JavaScript wywoływaną natychmiast po jej odczytaniu. Takie funkcje ograniczają zakres użytych zmiennych/funkcji do funkcji natychmiastowej. Chroni to skrypt przed kolizjami nazw. Zobaczmy przykład:
// Pierwszy sposób wywołania IIFE
(function() {
let data = 10;
function bar(){}
}());
// Drugi sposób
(function() {
let data = 10;
function bar(){}
})(); // drobna różnica w wywołaniu, ale taki sam efekt
// Zmienne nie są dostępne poza funkcjami natychmiastowym
console.log(data); // Uncaught ReferenceError: data is not defined
console.log(bar); // ReferenceError: bar is not defined
Dodatkowo funkcja natychmiastowa może zwracać wartość np obiekt z udostępnionymi danymi z IIFE, czyli możemy emulować prywatne i publiczne funkcje/zmienne. Oczywiście o ile nie możemy używać klas ES6. Przykład:
const result = (function () {
let innerData = "inner value";
function innerFunc() {
console.log(innerData);
};
return {data: 15,
str: "text",
bar: innerFunc
};
})();
// jest dostep do zwróconego obiektu
console.log(result); // Object { data: 15, str: "text", bar: innerFunc() }
console.log(result.bar()); // "inner value"
Na rozmowie rekrutacyjnej z JavaScript może pojawić się pytanie o IIFE, więc nie zapominajmy o tej ciekawej funkcji.
KW