
Funkcję w JavaScripcie zadeklarujesz na dwa sposoby: przez wyrażenie funkcyjne albo przez deklarację funkcji. Pierwsze da się zapisać w zmiennej, drugą wywołasz w dowolnym miejscu kodu. Najczęściej spotyka się deklaracje funkcji, sam też znałem głównie je, ale warto wiedzieć, że jest jeszcze druga droga.
Ten artykuł może być aktualizowany
Deklaracja funkcji
W przeciwieństwie do wyrażenia funkcyjnego funkcję utworzoną przez deklarację można wywołać, zanim jeszcze zostanie zadeklarowana: interpreter wyszukuje zmienne i deklaracje funkcji, zanim przejdzie do reszty skryptu. Zadeklarowaną funkcję wywołasz więc dalej w kodzie, ale żeby w ogóle dało się ją wywołać, musisz nadać jej nazwę.
function addition(a, b) {
return a + b;
};
var calcul= addition(2, 5) ;Wyrażenie funkcyjne
Wyrażenie funkcyjne to funkcja utworzona, zapisana i traktowana jak zmienna. Zwykle nie ma nazwy i dlatego mówi się o funkcjach anonimowych. Funkcja siedzi w zmiennej i wywołasz ją jak każdą inną. Pamiętaj jednak, że zostaje przetworzona dopiero wtedy, gdy interpreter przeglądarki dojdzie do jej deklaracji. Nie wywołasz jej więc wcześniej, a każdy kod, który wykona się do tego miejsca, może zmienić to, co dzieje się w środku funkcji.
var addition = function(a, b) {
return a + b;
};
var calcul = addition(2, 5) ;Immediately-Invoked Function Expression
Wszystkie zmienne zadeklarowane w takiej funkcji anonimowej, nazywanej zwykle IIFE, są odizolowane od zmiennych o tych samych nazwach z innych skryptów. Odpowiada za to zasięg zmiennych, po angielsku scope. Oto przykład IIFE.
var addition = (function(){
var a = 10;
var b = 20;
return a + b;
}());- Nawiasy otaczające funkcję gwarantują, że zostanie potraktowana jak wyrażenie.
- Para nawiasów na końcu
()mówi interpreterowi, żeby wywołał funkcję natychmiast.
Najczęściej sięga się po ten wzorzec na starcie nowego skryptu, żeby odizolować cały jego kod.
Kiedy używać anonimowych wyrażeń funkcyjnych?
Nadają się do kodu, który ma wykonać się raz, a nie być wywoływany wielokrotnie przez inne części skryptu. Anonimowego wyrażenia funkcyjnego użyjesz:
- żeby uniknąć konfliktów między dwoma skryptami, które używają tych samych nazw zmiennych co nasz.
- jako argumentu przy wywołaniu funkcji (do wyliczenia jej wartości);
- żeby wykonać zadanie po wystąpieniu zdarzenia,
- żeby przypisać wartość właściwości obiektu.
···


