Najnowsze tutoriale tworzenie stron internetowych
 

JavaScript Closures


Zmienne JavaScript może należeć do zakresu lokalnej lub globalnej.

Zmienne prywatne może być możliwe z zamknięciami.


Zmienne globalne

Funkcja może uzyskać dostęp do wszystkich zmiennych zdefiniowanych wewnątrz funkcji, na przykład:

Przykład

function myFunction() {
    var a = 4;
    return a * a;
}
Spróbuj sam "

Ale funkcja może również uzyskać dostęp do zmiennych zdefiniowanych na zewnątrz funkcji, na przykład:

Przykład

var a = 4;
function myFunction() {
    return a * a;
}
Spróbuj sam "

W ostatnim przykładzie, a jest zmienną globalną.

Na stronie internetowej, zmienne globalne należą do obiektu window.

Zmienne globalne mogą być używane (i zmienione) przez wszystkie skrypty na stronie (w oknie).

W pierwszym przykładzie, a jest zmienną lokalną.

Zmienna lokalny może być stosowany tylko wewnątrz funkcji, gdzie jest zdefiniowany. Jest on ukryty przed innymi funkcjami i innego kodu skryptowego.

Globalne i lokalne zmienne o tej samej nazwie są różne zmienne. Modyfikacja jednego, nie zmienia drugiego.

Zmienne tworzone bez słowa kluczowego var, są zawsze globalne, nawet jeśli są one tworzone wewnątrz funkcji.


zmienna Lifetime

Zmienne globalne żyć tak długo, jak długo żyje aplikacji (Okno / strona internetowa).

Zmienne lokalne mają krótkie życie. Są one tworzone, gdy funkcja jest wywoływana i usunięte, gdy funkcja jest zakończona.


Dylemat liczniku

Załóżmy, że chcesz użyć zmiennej do liczenia coś i chcesz licznik ten będzie dostępny dla wszystkich funkcji.

Można użyć zmiennej globalnej oraz funkcję do zwiększenia licznika:

Przykład

var counter = 0;

function add() {
    counter += 1;
}

add();
add();
add();

// the counter is now equal to 3
Spróbuj sam "

Licznik powinien być zmieniony tylko przez add() funkcji.

Problem polega na tym, że każdy skrypt na stronie można zmienić licznik, bez wywoływania add() .

Jeśli oświadczam licznik wewnątrz funkcji, nikt nie będzie mógł go zmienić bez wywoływania add ():

Przykład

function add() {
    var counter = 0;
    counter += 1;
}

add();
add();
add();

// the counter should now be 3, but it does not work !
Spróbuj sam "

Nie działało! Za każdym razem gdy wywołujemy add() funkcji, licznik jest ustawiony na 1.

Javascript Funkcja wewnętrzna może rozwiązać ten problem.


Funkcje JavaScript zagnieżdżone

Wszystkie funkcje mają dostęp do zasięgu globalnym.

W rzeczywistości, w JavaScript, wszystkie funkcje mają dostęp do zakresu "nad" nimi.

JavaScript obsługuje funkcje zagnieżdżone. Funkcje zagnieżdżone mają dostęp do zakresu "nad" nimi.

W tym przypadku, wewnętrzna funkcja plus() ma dostęp do zmiennej licznika w funkcji nadrzędnej:

Przykład

function add() {
    var counter = 0;
    function plus() {counter += 1;}
    plus();   
    return counter;
}
Spróbuj sam "

To może być rozwiązany dylemat przeciwnym razie moglibyśmy dotrzeć do plus() funkcji z zewnątrz.

Musimy także znaleźć sposób, aby wykonać licznik = 0 tylko raz.

Musimy zamknięcie.


Zamknięcia JavaScript

Pamiętaj funkcje samodzielne wywoływanie? Co oznacza ta funkcja zrobić?

Przykład

var add = (function () {
    var counter = 0;
    return function () {return counter += 1;}
})();

add();
add();
add();

// the counter is now 3
Spróbuj sam "

Przykład Poradnik

Zmienna dodatek jest przypisana wartość zwracaną samodzielnego wywoływania funkcji.

Samo-wywoływanie funkcja działa tylko raz. To ustawia licznik na zero (0) i zwraca wyrażenie funkcyjne.

W ten sposób staje się dodatek funkcyjny. W "wspaniały" jest to, że może on uzyskać dostęp do licznika w zakresie dominującej.

To się nazywa zamknięcie JavaScript. To sprawia, że możliwe, że funkcja ma "prywatny" zmienne.

Licznik jest chronione przez zakres funkcji anonimowej, i może być zmieniona jedynie za pomocą funkcji dodawania.

Zamknięcie jest funkcją mającą dostęp do zakresu dominującej, nawet po funkcja dominująca zamknięte.