English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

JavaScript-Basisanleitung

JavaScript-Objekt

JavaScript-Funktion

JS-HTML-DOM

JS-Browser-BOM

AJAX-Basisanleitung

JavaScript-Referenzhandbuch

JavaScript-Closure

JavaScript-Variable kann zuLokalBereich oderGlobalBereich.

Man kann verwendenKlammerSetzen Sie die globale Variable als lokales (privates).

Warum brauchen wir eine Klammer?

Angenommen, wir möchten eine Variable verwenden, um etwas zu zählen und möchten, dass der Zähler in allen Funktionen verwendet werden kann.

Wir können eine globale Variable und eine Funktion zum Erhöhen des Zählers verwenden:

// Initialisierung des Zählers
var counter = 0;
// Funktion zur Erhöhung des Zählers
function increment() {
  counter++;
}
// Aufruf von increment() 3mal
increment();
increment();
increment();
// Jetzt sollte der Zähler sein3
document.getElementById("output").innerHTML = `Zähler: ${counter};`;
Testen Sie heraus‹/›

Die obige Lösung hat ein Problem: Jeder Code auf der Seite kann den Zähler ändern, ohne increment() aufzurufen.

Interne Funktionen in JavaScript können dieses Problem lösen.

JavaScript geschachtelte Funktionen

JavaScript unterstützt geschachtelte Funktionen. Geschachtelte Funktionen können auf den Bereich darüber zugreifen.

In diesem Beispiel kann die interne Funktion auf die Zählervariable der äußeren Funktion zugreifen:

function outer() {
  var counter = 0;
  function inner() {
      counter++;
  }
  return counter; 
}
Testen Sie heraus‹/›

Schachtelfunktionen können das vorangegangene Problem lösen, wenn wir auf die Funktion inner() von außen zugreifen können.

Wir müssen noch eine Methode finden, um counter = 0 nur einmal auszuführen, das ist die Closure, die wir später besprechen werden.

JavaScript-Closure

Eine Closure ist die Kombination aus einer Funktion und dem lexikalischen Umfeld, in dem sie deklariert wurde.

Eine Closure kann auf Variablen im Bereich einer anderen Funktion zugreifen. Dies wird durch das Erstellen einer Funktion im Bereich der Funktion erreicht. Natürlich kann die äußere Funktion nicht auf den internen Bereich zugreifen.

var increment = (function() {
  var counter = 0;
  function inner() {
      return ++counter;
  }
  return inner;
})();
Testen Sie heraus‹/›

Der Rückgabewert der Selbstausführungsfunktion wird für die Inkrementierung der Variable verwendet.

Die Selbstausführungsfunktion wird nur einmal ausgeführt. Sie setzt den Zähler auf Null und gibt die Funktionsausdrucksform zurück.

Eine Closure kann auch auf den Elternbereich zugreifen, selbst wenn die Elternfunktion geschlossen ist.