Funkcja natychmiastowa IIFE

Immediately-Invoked Function Expression czyli funkcja natychmiastowa IIFE jest niezwykle przydatną na co dzień formą zapisu i uruchamiania funkcji. Jej konstrukcja polega na zamknięciu całej funkcji w nawiasy (może być to funkcja anonimowa) i natychmiastowym jej wywołaniu.

(function() {
       //some code
})();

Zapis taki tworzy domknięcie. Dzięki temu unikniemy deklaracji zmiennych globalnych, jak również ewentualnego zdublowania nazw zmiennych (w przeciwieństwie do sytuacji, gdy wszystkie instrukcje, są pisane w jednym ciągu). Takie przypadkowe zdublowanie się zmiennych przysporzy wiele problemu w sytuacji, gdy nad aplikacją pracuje większa liczba programistów, którzy tworzą różne jej elementy i ostatecznie jest to łączone w jeden program. W takim wypadku zdublowanie nazwy zmiennej może mieć opłakane skutki.

Inną zaletą użycia domknięcia jest fakt, że użytkownik nie będzie miał również dostępu do zmiennych przez console.log(). Zmniejszona jest też ilość kodu w porównaniu do funkcji nazwanych, ponieważ nie trzeba ich tutaj osobno wywoływać.


 

Przykładowy kod

Ciekawym przykładem jest rozwiązanie poniższego problemu:

Tworzymy pętlę, która wykona 10 obrotów. W niej chcielibyśmy wyświetlić licznik pętli (czyli kolejne liczby od 0 do 9). Trudnością jednak jest tutaj użycie funkcji setTimeout, która każdy ruch pętli opóźni o 1000 milisekund:

for(var i = 0; i < 10; i++) {
         setTimeout(function() {
         console.log(i);
         }, 1000); 
}

W rezultacie w console.log otrzymamy 10 pozycji wskazujących liczbę: 10. Dzieję się tak ponieważ setTimeout nie zatrzyma pętli na okres swojego oczekiwania i zanim zdąży się wyświetlić pierwsza liczba to pętla zostanie już zakończona.

Rozwiązanie tego problemu daje nam właśnie oplecenie setTimeout natychmiastową funkcją anonimową (IIFE).

for(var i = 0; i < 10; i++) {
       (function(e) {
          setTimeout(function() {
          console.log(e);
          }, 1000);
       })(i);
}

Poniżej efekt działania powyższego kodu zarówno pierwszej jak i drugiej (poprawionej) wersji.

Funkcja natychmiastowa IIFE