Heim  >  Artikel  >  Web-Frontend  >  Verschlüsse in JavaScript

Verschlüsse in JavaScript

WBOY
WBOYOriginal
2024-09-12 10:30:02910Durchsuche

Closures in JavaScript

Hallo,

In diesem Beitrag lernen wir Schließungen.

Abschlüsse sind in JavaScript unerlässlich, da sie es einer Funktion ermöglichen, auf Variablen aus ihrem übergeordneten Bereich zuzugreifen, selbst nachdem diese übergeordnete Funktion geschlossen wurde. Dies ist von entscheidender Bedeutung für Funktionen, die sich Daten im Laufe der Zeit merken müssen, wie etwa bei Rückruffunktionen oder der Aufrechterhaltung des Zustands. Hier ist zu beachten, dass die nicht verwendeten Variablen des übergeordneten Bereichs durch Garbage Collection erfasst werden.

Definition:
Ein Abschluss ist die Kombination einer gebündelten (eingeschlossenen) Funktion mit Verweisen auf ihren umgebenden Zustand (die lexikalische Umgebung). Mit anderen Worten: Ein Abschluss gewährt einer Funktion Zugriff auf ihren äußeren Gültigkeitsbereich. In JavaScript werden Abschlüsse jedes Mal erstellt, wenn eine Funktion zum Zeitpunkt der Funktionserstellung erstellt wird.

Grundsätzlich haben Schließungen Zugriff auf:

  • Ihr eigener Anwendungsbereich
  • Der Umfang der äußeren Funktionen
  • Der globale Geltungsbereich

Bonuspunkt
Lexikalischer Geltungsbereich: Innere Funktionen haben Zugriff auf Variablen im äußeren Geltungsbereich.

Lassen Sie es uns anhand eines Beispiels verstehen.

Beispiel

F> Schreiben Sie eine Funktion createCounter. Es sollte eine anfängliche ganzzahlige Initialisierung akzeptieren. Es sollte ein Objekt mit drei Funktionen zurückgeben.

Die drei Funktionen sind:

increment() erhöht den aktuellen Wert um 1 und gibt ihn dann zurück.
decrement() reduziert den aktuellen Wert um 1 und gibt ihn dann zurück.
reset() setzt den aktuellen Wert auf init und gibt ihn dann zurück.

Siehe den kommentierten Code unten für ein init = 5-Fallbeispiel.

Lösung

var createCounter = function(init) {
    const INITIAL_VALUE = init;
    return {
        increment: () => ++init,
        decrement: () => --init,
        reset: () => init=INITIAL_VALUE,
    }
};

/**
 * const counter = createCounter(5)
 * counter.increment(); // 6
 * counter.reset(); // 5
 * counter.decrement(); // 4
 */

Erklärung:

  • Erfassen der Init-Variablen in ihrem lexikalischen Bereich.
  • Zurückgeben von Methoden, die auf init zugreifen und es ändern können, auch nachdem die Ausführung von createCounter abgeschlossen ist.
  • Erstellen eines privaten, dauerhaften Zustands (init), auf den nur über die zurückgegebenen Methoden zugegriffen werden kann.
  • Ermöglicht die Erstellung mehrerer unabhängiger Zähler, jeder mit seinem eigenen gekapselten Zustand.

Wenn Sie Zweifel oder Vorschläge haben, können Sie diese gerne in Kommentaren hinzufügen.

Diese Frage wurde von Leetcode übernommen. Link

Bedenken Sie schließlich, dass global deklarierte Variablen für jeden Abschluss in einem Skript zugänglich sind.

Ich hoffe, Sie haben jetzt ein gutes Verständnis für Schließungen. Vielen Dank fürs Lesen

Das obige ist der detaillierte Inhalt vonVerschlüsse in JavaScript. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:Fragen zum NODE-Interview...Nächster Artikel:Fragen zum NODE-Interview...