JavaScript dla każdego
//  wróć   główna   dalej  //

Wywoływanie funkcji

return, arguments

Funkcje są obiektami, do których można się odwoływać. Oznacza to, że w obrębie funkcji możliwe jest jej ponowne wywołanie, można zainicjować działania innej funkcji itd. Klasycznym przykładem rekurencji (odwoływania się funkcji do samej siebie) jest obliczanie sllni danego argumentu. W tym celu należy wykorzystać polecenie return. Zwraca ono wartość podaną jako argument i wstawia w miejsce wywołania funkcji. Funkcja licząca silnię ma następującą postać:

function Silnia(a)
{
 if (a>1) i*=Silnia(a-1);
 else i=1;
 return i
};

alert(Silnia(7));

Zasada działania skryptu jest następująca. Okienko dialogowe (więcej I>>) wywołuje funkcję a argumentem 7. Ta sprawdza, czy dany argument jest większy od 1. Jeżeli tak, to następuje ponowne wywołanie funkcji z argumentem o jeden mniejszym. Pozostałe instrukcje funkcji nie są (na razie) wykowywane. Sytuacja się powtarza, dopóki argument nie wyniesie jeden. Wtedy za wartość i zostaje podstawiona liczba 1. Funkcja przy pomocy return zwraca obliczoną wartość i, czyli 1 do wcześniejszej funkcji. Następnie wraca do poprzedniego odwołania i za wartość Silnia(a-1) zostaje podstawiona wartość zwrócona przez poprzednią funkcję. Zmienna i zostaje zmodyfikowana o iloczyn danej liczby i silni poprzedniej. Sytuacja powtarza się taką ilość razy, jaką funkcja odwoływała się do samej siebie. Ostateczna obliczona wartość zostaje zwrócona do okienka dialogowego.

Ilość odwołań i ich adres w pamięci jest zapamiętany na stosie, dlatego zmienna i nie koliduje z nią samą w innym wywołaniu funkcji.

Inną zaletą takiego działania jest możliwość wstawienia funkcji jako argumentu (o ile funkcja zwraca wartość), co miało miejsce w tym przypadku. Jeżeli funkcja będzie zwracała tylko wartości logiczne, można jej użyć np w instrukcji warunkowej (więcej I>>):

if (Silnia(5)==120) alert("To jest silnia liczby 5")

Działanie skryptu możesz sprawdzić poniżej, w miarę możliwości komputera:

return ma jeszcze jedno praktyczne wykorzystanie. Za pomocą tego polecenia można powrócić do miejsca, gdzie dana funkcja została wywołana. Przypuśćmy, że bardzo długi skrypt został podzielony na kilka funkcji, by był łatwiejszy do obsługi. Jedna z funkcji jest odpowiedzialna za czyszczenie formularza inna za sprawdzenie jego poprawności. W ten sposób można podzielić program na małe, łatwiejsze do edytowania funkcje.

Zwykle za return pisze się zero, jeśli zwracana wartość nie ma znaczenia. Zwrócone zero oznacza, że w funkcji nie wystąpił żaden błąd, czyli wykonała się poprawnie.

Przy omawianiu przekazywania argumentów do funkcji warto jeszcze wspomnieć o jednej właściwości funkcji. Przekazane argumenty mogą być odczytywane nie tylko przez wcześniej zadeklarowane zmienne w nawiasach. Jeśli jest ich dużo, to można je odczytać ze specjalnej tablicy, w której są dostępne.

NazwaFunkcji.arguments

Można w ten sposób sprawdzić np. ile argumentów zostało przekazanych do funkcji. Jeśli odwołanie to jest wewnątrz niej samej można je uprościć:

this.arguments.length
arguments.length

Powyższe wartości wskazują na ilość elementów, które pobiera funkcja, w której się te instrukcje znajdują.


Do góry