Kurs obiektowego JavaScript (12)

Autor: Damian Chodorek • Opublikowany: 29 września 2014 • Ostatnia aktualizacja: 8 lutego 2015 • Kategoria: javascript, kursy

Przedstawienie funkcji anonimowych i zwrotnych (callback).

Funkcje są traktowane w JS podobnie jak inne dane. Co to znaczy? Funkcje możesz przypisywać do zmiennych. Przykład poniżej.

//dwa równoważne sposoby definiowania funkcji
function f(){return 1;}
var f=function(){return 1;}

typeof f; //"function"

Czym więc różni się funkcja od zwykłych danych? Tym, że zawiera kod oraz może zostać wywołana. Jeśli używasz w JS nazwy funkcji w ten sposób – f, to będzie traktowana jak dane i nie zostanie wywołana. Jeśli jednak dodasz nawiasy f() to w tym momencie wywołasz funkcję.

var suma=function(a, b){ return a+b; }
var dodaj=suma; //teraz funkcja jest pod nazwami "dodaj" i "suma"

typeof suma; //"function"
typeof dodaj //"function"

dodaj(1, 2); //3

Dla ciekawskich: zauważ, że poniższy kod nie zadziała, tak jak oczekujemy:

delete suma; //zwróci false, zmienna nadal będzie istnieć

Wynika to z faktu, iż operator delete usuwa wyłącznie zmienne, które nie są zadeklarowane przy użyciu słówka kluczowego var. Bardziej szczegółowo na ten temat tutaj: http://perfectionkills.com/understanding-delete.

Funkcje anonimowe

Czym są dane anonimowe? Spójrz na kod poniżej.

"tmp"; 12; [12,31,76]; null;

Pomimo, że wygląda dziwnie, jest poprawny. Dane są zdefiniowane, ale nie zostały przypisane do żadnych zmiennych, nie zostały nazwane, nie da się ich zidentyfikować, innymi słowy - są anonimowe. Nie możesz się do nich odnieść w żaden sposób.

Skoro funkcje są jak dane, to również mogą być anonimowe. Poniżej przykład.

function(a){ return a; }

Co można zrobić z taką funkcją? Mamy dwie możliwości:

  • przekazać jako parametr innej funkcji,
  • wywołać w momencie jej utworzenia.

Callback functions (funkcje zwrotne)

Na początku przykład pokazujący jak przekazać funkcję anonimową jako parametr innej funkcji.

var dodaj=function(a, b){ return a()+b; } /*z tego kodu możesz wywnioskować, że a musi być funkcją*/

dodaj( function(){return 1;}, 2 ); //3

Oczywiście zwykłe funkcje nazwane, także możesz przekazywać jako parametry.

Kiedy przekazujemy funkcję A jako parametr funkcji B, to mówimy, ze A jest funkcją zwrotną (callback function). Jeśli A jest anonimowa, to można powiedzieć, że A jest anonimową funkcją zwrotną (anonymous callback function).

W tym artykule to wszystko. Przejdź do następnej części:

Kurs obiektowego JavaScript (13)

Zobacz również
Kurs obiektowego JavaScript (10)Omówienie funkcji, sposobów przekazywania parametrów oraz kilku przydatnych funkcji wbudowanych.
Kurs obiektowego JavaScript (11)Zmienne globalne. Nietypowy zakres zmiennych lokalnych.
Kurs obiektowego JavaScript (13)Wywołanie funkcji przy definicji, zagnieżdżanie, zwracanie i nadpisywanie funkcji.
Kurs obiektowego JavaScript (14)Łańcuch zasięgu i jego przerywanie. Gettery, settery.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.