Neueste Web-Entwicklung Tutorials
 

JavaScript Closures


JavaScript - Variablen können auf den lokalen oder globalen Bereich gehören.

Private Variablen können mit Verschlüssen ermöglicht werden.


Globale Variablen

Eine Funktion kann alle Variablen innerhalb der Funktion definiert zuzugreifen, wie folgt aus :

Beispiel

function myFunction() {
    var a = 4;
    return a * a;
}
Versuch es selber "

Aber eine Funktion kann auch Variablen zugreifen außerhalb der Funktion definiert, wie folgt aus :

Beispiel

var a = 4;
function myFunction() {
    return a * a;
}
Versuch es selber "

Im letzten Beispiel ist eine eine globale Variable.

In einer Web-Seite, gehören globale Variablen an das Fenster-Objekt.

Globale Variablen können verwendet werden (und geändert) von allen Skripts auf der Seite (und im Fenster).

In dem ersten Beispiel ist eine lokale Variable.

Eine lokale Variable kann nur innerhalb der Funktion verwendet werden, wo sie definiert ist. Es wird von anderen Funktionen versteckt und andere Script-Code.

Globale und lokale Variablen mit dem gleichen Namen unterschiedliche Variablen sind. ein Ändern, ändern Sie das andere nicht aus.

Variablen ohne das Schlüsselwort var erstellt, sind immer global, auch wenn sie innerhalb einer Funktion erstellt werden.


Variable Lebensdauer

Globale Variablen leben, solange Ihre Anwendung (Fenster / Ihrer Webseite) lebt.

Lokale Variablen haben eine kurze Lebensdauer. Sie entstehen, wenn die Funktion aufgerufen wird, und gelöscht, wenn die Funktion beendet ist.


Ein Zähler Dilemma

Angenommen, Sie möchten eine Variable zu verwenden, um etwas zu zählen, und Sie wollen, dass diese Zähler auf alle Funktionen zur Verfügung stehen.

Sie könnten eine globale Variable verwenden, und eine Funktion, um den Zähler zu erhöhen:

Beispiel

var counter = 0;

function add() {
    counter += 1;
}

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

// the counter is now equal to 3
Versuch es selber "

Der Zähler sollte nur durch die geändert werden add() Funktion.

Das Problem ist, dass jedes Skript auf der Seite des Zählers ändern können, ohne Aufruf add() .

Wenn ich den Zähler in der Funktion deklarieren, wird niemand in der Lage sein, es zu ändern, ohne hinzufügen () aufrufen:

Beispiel

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

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

// the counter should now be 3, but it does not work !
Versuch es selber "

Es hat nicht funktioniert! Jedes Mal , wenn ich den Anruf add() Funktion, wird der Zähler auf 1 gesetzt.

Eine JavaScript innere Funktion kann dieses Problem lösen.


JavaScript Verschachtelte Funktionen

Alle Funktionen haben Zugriff auf den globalen Bereich.

In der Tat, in JavaScript, haben alle Funktionen Zugriff auf den Umfang "über" sie.

JavaScript unterstützt verschachtelte Funktionen. Verschachtelte Funktionen haben Zugriff auf den Rahmen "über" sie.

In diesem Beispiel ist die innere Funktion plus() hat Zugriff auf die Zählervariable in der übergeordneten Funktion:

Beispiel

function add() {
    var counter = 0;
    function plus() {counter += 1;}
    plus();   
    return counter;
}
Versuch es selber "

Dies könnte der Zähler Dilemma gelöst haben, wenn wir das erreichen konnte , plus() Funktion von außen.

Wir müssen auch einen Weg finden , counter = 0 nur einmal auszuführen.

Wir brauchen eine Schließung.


JavaScript Closures

Denken Sie daran, sich selbst aufrufen Funktionen? Was macht diese Funktion?

Beispiel

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

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

// the counter is now 3
Versuch es selber "

Beispiel erklärt

Die Variable add wird der Rückgabewert einer selbst Aufruf Funktion zugeordnet.

Die Selbst Aufruf Funktion läuft nur einmal. Es setzt den Zähler auf Null (0), und gibt einen Funktionsausdruck.

Auf diese Weise Add wird eine Funktion. Die "wunderbar" ist, dass es den Zähler im übergeordneten Bereich zugreifen können.

Dies ist ein JavaScript - Verschluss genannt. Es macht es möglich , dass eine Funktion "private" Variablen zu haben.

Der Zähler wird durch den Umfang der anonymen Funktion geschützt und kann nur mit Hilfe der Add-Funktion geändert werden.

Ein Verschluß ist eine Funktion, die Zugang zu dem übergeordneten Bereich, sogar nach der übergeordneten Funktion abgeschlossen hat.