jesteś tutaj
463
Funkcje pierwszej klasy
A to jest
faktyczna funkcja.
To ponownie są nasze dwie funkcje. Pamiętasz
zapewne, że funkcja quack jest definiowana przy
użyciu deklaracji, a funkcja fly za pomocą wyrażenia
funkcyjnego. W obu przypadkach uzyskujemy referencje
do funkcji, które są zapisywane, odpowiednio,
w zmiennych quack oraz fly.
var superFly = fly;
superFly(2);
var superQuack = quack;
superQuack(3);
fly
function(num) {
...
}
Zmienna może zawierać
referencję do funkcji.
function quack(num) {
for (var i = 0; i < num; i++) {
console.log(”Kwak!”);
}
}
var fly = function(num) {
for (var i = 0; i < num; i++) {
console.log(”Latam!”);
}
};
Kiedy zapiszesz wartość zmiennej fly
w zmiennej superFly, superFly będzie
zawierać referencję do funkcji; a zatem
dodając do niej parę nawiasów i argument,
możemy ją wywołać!
I choć zmienna quack została utworzona przy
użyciu deklaracji funkcji, to zapisana w niej
wartość także jest referencją do funkcji,
a zatem możemy ją zapisać w zmiennej
superQuack i wywołać.
Konsola JavaScript
Latam!
Latam!
Kwak!
Kwak!
Kwak!
Jedną z najprostszych operacji, jakie możemy wykonywać na funkcjach,
jest zapisywanie ich w zmiennych. A tak można to zrobić.
Deklaracja funkcji zadba o przypisanie
referencji do zmiennej o nazwie
odpowiadającej nazwie funkcji,
w naszym przypadku jest to quack.
Kiedy stosujesz wyrażenie funkcyjne, musisz sam
zadbać o zapisanie uzyskanej referencji w zmiennej.
W tym przypadku referencję zapisuje się w zmiennej fly.
Innymi słowy, referencje zawsze będą
referencjami, niezależnie od sposobu,
w jaki zostaną utworzone (przy użyciu
deklaracji czy też wyrażenia funkcyjnego).
O tym, dlaczego funkcje są także wartościami
Oczywiście, wszyscy uważamy, że funkcje to coś, co się wywołuje, lecz można je także traktować
jak wartości. Ta wartość jest w rzeczywistości referencją do funkcji, a jak już widziałeś, taką
referencję
uzyskujemy zawsze, niezależnie od tego, czy zdefiniujemy funkcję przy użyciu
deklaracji, czy też wyrażenia funkcyjnego.
464
Rozdział 10.
Ćwiczenie z traktowania funkcji jako wartości
var winner = function() { alert(”Farciarz!”) };
var loser = function() { alert(”Leszczu!”) };
// W ramach rozgrzewki przetestujmy funkcjÚ.
winner();
// Dla praktyki okreĂlmy wartoĂci zmiennych.
var a = winner;
var b = loser;
var c = loser;
a();
b();
// A teraz spröbuj swojego szczÚĂcia w grze.
c = a;
a = b;
b = c;
c = a;
a = c;
a = b;
b = c;
a();
Wykonaj ten kod
(ręcznie!) i przekonaj
się, czy będziesz
miał szczęście,
czy przegrasz.
Pamiętaj, że te zmienne zawierają
referencje do funkcji winner i loser.
Referencje te możemy dowolnie
zapisywać w innych zmiennych,
podobnie jak wszelkie inne wartości.
Pamiętaj, że w dowolnym momencie
możemy użyć takiej referencji, by
wywołać funkcję.
Zaostrz ołówek
Aby dobrze zrozumieć pomysł traktowania funkcji jako wartości, zagrajmy
w pewną dobrze znaną grę losową. Konkretnie rzecz biorąc, spróbujmy zagrać
w trzy orzeszki. Uda Ci się wygrać, czy przegrasz? Spróbuj, aby się przekonać.
Zacznij wyobrażać sobie funkcje jako wartości, podobne do liczb, łańcuchów
znaków, wartości logicznych oraz obiektów. Jedyną różnicą pomiędzy tak
pojmowaną funkcją a innymi wartościami jest to, że funkcję można wywołać.
Get Programowanie w JavaScript Rusz głową! now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.