Funkcje w JavaScript

Część druga

Michał Matulka

michal.matulka@protonmail.ch

Przypomnijmy sobie

Deklaracja "klasyczna"

function mojaFunkcja() {
//Tutaj jest kod
}

Znana z innych języków programowania

  • Słowo kluczowe function
  • Nazwa funkcji pomiędzy słowem kluczowym a nawiasami
  • Brak spacji pomiędzy nazwą a nawiasem (jestem pedantycznym nerdem, to nie jest konieczne)
  • Nie kończymy tej deklaracji średnikiem

Funkcja jako wartość

Pamiętacie deklarację funkcji z wykorzystaniem wartości?

var mojaFunkcja = function () {
    //Tutaj jest kod
};

Funkcja sama w sobie jest wartością!

Nie jest to to samo, co zwrócenie wartości z funkcji.

Przypisanie funkcji do zmiennej

Zonk

Przypisanie funkcji do zmiennej

var dodaj = function (a, b) {
    return a + b;
};

Tak jak dowolna inne wyrażenie posiadające lub zwracające wartość, funkcję możemy przypisać do zmiennej.

Przy tej deklaracji nie musimy wstawiać nazwy funkcji pomiędzy słowem kluczowym function a nawiasem

Wywołanie funkcji przypisanej do zmiennej

Niespodzianka! Niczym nie różni się od zwykłego wywołania!

alert(dodaj(19, 25));

Przekazanie funkcji jako argumentu do innej funkcji

Zonk

Przekazanie funkcji jako argumentu do innej funkcji

var przyjmijFunkcje = function (funkcja) {
    return 'Przekazana funkcja zwróciła wartość ' + funkcja();
},
takaSobieFunkcja = function () {
    var cos = 'Ko';
    cos += 'py';
    cos += 'tko';

    return cos;
};

Wywołanie tego tworu

przyjmijFunkcje(takaSobieFunkcja);

Zwróćcie uwagę na brak nawiasów przy takaSobieFunkcja! Używamy jej jako zmiennej, nie wywołujemy!

Możecie również usłyszeć o tym pod nazwą "callback".

Może teraz bardziej praktyczny przykład

var wezCosPowiedz = function () {
    alert('Mówię coś!');
};

A teraz to, na co wszyscy czekali

setTimeout(wezCosPowiedz, 1000);

(a teraz zgadnijcie co to robi :) )

Literał funkcji

Funkcje można przekazywać jak każdą inną zmienną, sama deklaracja funkcji jest jednocześnie jej literałem!

Dlatego możemy też zrobić tak:

setTimeout(function () { alert('Mówię coś!'); }, 1000);

Ale nie róbmy bo to robi bałagan w kodzie ;). Zawsze lepiej zadeklarować sobie funkcję w zmiennej i przekazać zmienną. Wtedy widać też jej nazwę.

Zwróćcie uwagę, że ta funkcja nie posiada nazwy. Taką funkcję nazywamy funkcją anonimową.

Funkcja natychmiastowa

Funkcja anonimowa może zostać wywołana od razu przy deklaracji.

(function () { alert('Mówię coś!'); })();

Nazywamy ją wtedy funkcją natychmiastową.

Dla ciekawskich

Te rzeczy będziemy omawiać w przyszłości.

  • Funkcje natychmiastowe służą do ograniczania zasięgu zmiennych, gdyż zmienne zadeklarowane wewnątrz nich nie są widoczne na zewnątrz.
  • Funkcje w rzeczywistości są obiektami.

Podziękował ;)