Samowywołujące się anonimowe funkcje

Jako uzupełnienie poprzedniego posta chciałem opisać zjawisko samowywołujących się, anonimowych funkcji. Nie jest to do końca taka sama kategoria tworzenia funkcji, jak te o których pisałem wcześniej, ale myślę że mogę ją tu wepchnąć 🙂 Temat jest dość zaawansowany, szczególnie to jak możemy takie funkcje wykorzystać. Nie oznacza to jednak, że są to rzeczy niezrozumiałe.

Postaram się, jak zawsze, opisać wszystko w miarę przystępnie i podać jasne przykłady.

Samo-wywołujące się anonimowe funkcje

Czym jest taka samowywołująca się funkcja? Spójrzmy najpierw na kod, zwykłego wyrażenia funkcji

zmienna makeBark to tak naprawdę nic innego jak referencja do obiektu funkcji. Jak wiemy z poprzedniego posta, funkcja ta nie ma nazwy, dlatego mówi się na nią funkcja anonimowa 🙂 Jeżeli będziemy chcieli wywołać tę funkcję, to wystarczy, że użyjemy referencji, o tak:

Czyli makeBark przywołuję zawartość anonimowej funkcji, i używa operatora wywołania ‚()’ aby ją ‚odpalić’. Ale jeśli makeBark to tylko nazwa zastępcza, to znaczy, że moglibyśmy wpisać po prostu to co przechowuje, czyli naszą funkcję anonimową. Zobaczmy:

Jedyny dodatek to para nawisów otaczających treść funkcji. Musimy je dodać, żeby javascript wiedział, że chodzi nam o wywołanie całości. W innym wypadku otrzymalibyśmy błąd.

Co ciekawe, możemy tak uruchomić kod na stronie, bez żadnego eventu onload. Gdy przeglądarka będzie przerabiać kod i natrafi, na taką funkcję, po prostu ją odpali.

I tyle. Tak jak pisałem. Funkcja w takiej formie zostanie od razu wywołana, gdy tylko przepływ programu na nią trafi. Nic więcej nie jest nam tutaj potrzebne. Co możemy jeszcze zrobić to dodać argumenty, tak jak w każdej funkcji. Jak to zrobić? Już pokazuję:

Może to wyglądać trochę „na opak”. Ale wystarczy trochę się przyjrzeć i wyraźnie widać co tu się dzieje. Mamy listę argumentów (w tym wypadku jeden message), są używane w bloku funkcji, a na koniec podajemy parametr przy wywołaniu. Nic trudnego.

Wykorzystanie samo-wywołujących się anonimowych funkcji w JavaScripcie

Ok, teraz kiedy już wiemy jak wyglądają takie funkcje, to możemy podać przykład wykorzystania ich w naturze 🙂

Jak już wspomniałem, Przykładem użycia tego typu funkcji, jest zainicjalizowanie jakiegoś kodu. Zerknijmy na ten przykład:

Dla prostoty wszystko w jednym pliku. Aby sprawdzić jak działa wystarczy zapisać całą treść w dokumencie .html i odpalić w przeglądarce.

Ta mini „aplikacja”, ma mechanizm obsługiwany przez obiekt który inicjalizuje samo-wywołująca się funkcja. Cała logika jest zamknięta w jednym bloku kodu. Wg. mnie ten kod jest bardzo czytelny. Szybko, łatwo i przyjemnie.

Warto zaznaczyć, że samowywołujące się anonimowe funkcję są również bazą do bardzo popularnego wśród programistów JS wzorca modułu. To jest jednak temat na osobny post 🙂

2 thoughts on “Samowywołujące się anonimowe funkcje”

  1. myślę, że warto byłoby dopisać, że główną zaletą i celem takiego podejścia jest zabezpieczenie się przed zaśmiecaniem przestrzeni globalnej – ale ogólnie dobrze napisane moim zdaniem 😉

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *