Skip to content

Latest commit

 

History

History
53 lines (37 loc) · 1.97 KB

File metadata and controls

53 lines (37 loc) · 1.97 KB

Deklaracje funkcji i wyrażenia funkcyjne

Funcje w języku JavaScript są typami pierwszoklasowymi, co oznacza, że mogą być przekazywane jak każda inna wartość. Jednym z typowych zastosowań tej cechy jest przekazywanie anonimowej funkcji jako callback do innej, prawdopodobnie asynchronicznej funkcji.

Deklaracja funckcji

function foo() {}

Powyższa funkcja zostaje wyniesiona zanim program wystartuje. Dzięki temu jest dostępna wszędzie w ramach zasięgu, w którym została zadeklarowana, nawet, jeżeli ta funkcja została wywołana przed faktyczną definicją w kodzie źródłowym.

foo(); // Działa ponieważ definicja funkcji została wyniesiona 
       // na początek zasięgu przed uruchomieniem kodu
function foo() {}

Wyrażenie funkcyjne

var foo = function() {};

Ten przykład przypisuje nienazwaną i anonimową funkcję do zmiennej foo.

foo; // 'undefined'
foo(); // wyrzuca błąd TypeError
var foo = function() {};

Ze względu na fakt, że deklaracja var wynosi zmienną foo na początek zasięgu zanim kod faktycznie zostanie uruchomiony, foo będzie zdefiniowane kiedy skrypt będzie wykonywany.

Ale ponieważ przypisania robione są dopiero podczas wykonania, wartość foo będzie ustawiona na domyślną wartość undefined zanim powyższy kod zostanie uruchomiony.

Nazwane wyrażenia funkcyjne

Kolejnym specjalnym przypadkiem jest przypisanie nazwanej funkcji.

var foo = function bar() {
    bar(); // Działa
}
bar(); // wyrzuca ReferenceError

W zewnętrznym zakresie bar nie będzie dostępna, ponieważ funkcja zostaje przypisana do foo, jednakże w wewnętrznym zakresie bar będzie dostępna. Jest to spowodowane tym, jak działa rozwiązywanie nazw w języku JavaScript. Nazwa funkcji jest zawsze dostępna w lokalnym zakresie tej funkcji.