Sie arbeiten an einem Projekt und benötigen eine Funktion, um sich die Werte von Variablen zu „merken“ – auch nachdem die Ausführung der Funktion abgeschlossen ist. Verschlüsse sind wie ein magischer Rucksack, mit dem Sie das Wissen aus einer vorherigen Lektion überallhin mitnehmen können, wo Sie sich in Ihrem Code befinden. Es ist eines der mächtigsten, aber dennoch missverstandenen Konzepte in JavaScript. Aber keine Sorge – am Ende dieses Leitfadens werden die Abschlüsse von „Kopfkratzen“ zu „Aha!“ übergehen
Ein Abschluss liegt vor, wenn sich eine Funktion an ihren umgebenden Zustand (die Variablen in ihrem Gültigkeitsbereich) „merkt“, selbst nachdem die Ausführung der äußeren Funktion abgeschlossen ist. Lassen Sie uns dies mit einer nachvollziehbaren Analogie aufschlüsseln:
Stellen Sie sich vor, Sie wären Student. Sie haben einen Rucksack mit Ihren Notizen, Stiften und Büchern. Du verlässt den Klassenraum (deine äußere Funktion), hast aber weiterhin Zugriff auf alles in deinem Rucksack (dein Verschluss). Wann immer Sie später ein Problem lösen müssen, können Sie auf das Wissen zurückgreifen, das Sie in Ihrem Rucksack gespeichert haben.
In JavaScript erfolgen Schließungen, wenn:
Sehen wir uns Schließungen anhand von Codebeispielen in Aktion an.
function outerFunction() { const outerVariable = 'Hello, Closure!'; function innerFunction() { console.log(outerVariable); } return innerFunction; } const myClosure = outerFunction(); myClosure(); // Output: "Hello, Closure!"
Was passiert hier?
function createCounter() { let count = 0; return function () { count++; return count; }; } const counter = createCounter(); console.log(counter()); // Output: 1 console.log(counter()); // Output: 2
Was passiert hier?
Abschlüsse bringen Entwickler oft zum Stolpern, wenn sie innerhalb von Schleifen verwendet werden.
for (let i = 1; i <= 3; i++) { setTimeout(() => console.log(i), i * 1000); } // Output: 1, 2, 3 (each after 1 second)
Warum funktioniert das?
? Dokumentation: Schließungen auf MDN
Verschlüsse sind nicht nur ein theoretisches Konzept – sie sind unglaublich praktisch! Hier sind einige häufige Szenarien, in denen Schließungen glänzen.
Abschlüsse können berechnete Werte zur Wiederverwendung speichern, was Zeit und Ressourcen spart.
function outerFunction() { const outerVariable = 'Hello, Closure!'; function innerFunction() { console.log(outerVariable); } return innerFunction; } const myClosure = outerFunction(); myClosure(); // Output: "Hello, Closure!"
Abschlüsse werden häufig in Ereignis-Listenern verwendet, um den Zustand aufrechtzuerhalten.
function createCounter() { let count = 0; return function () { count++; return count; }; } const counter = createCounter(); console.log(counter()); // Output: 1 console.log(counter()); // Output: 2
Sie können Abschlüsse verwenden, um private Variablen zu erstellen und die Funktionalität zu kapseln.
for (let i = 1; i <= 3; i++) { setTimeout(() => console.log(i), i * 1000); } // Output: 1, 2, 3 (each after 1 second)
Schließungen ermöglichen Ihnen:
Abschlüsse sind wie ein Schweizer Taschenmesser in JavaScript. Unabhängig davon, ob Sie Daten zwischenspeichern, Ereignisse verarbeiten oder private Variablen erstellen, bieten Abschlüsse Ihnen eine leistungsstarke Möglichkeit, den Status Ihrer Apps zu verwalten.
Ihre Herausforderung: Versuchen Sie, Abschlüsse in einem kleinen Projekt zu verwenden, beispielsweise beim Bau eines einfachen Zählers oder der Erstellung eines Caching-Mechanismus. Sie werden erstaunt sein, wie viel Kontrolle Sie durch Verschlüsse erhalten!
Wenn Ihnen dieser Artikel gefallen hat, denken Sie darüber nach, meine Arbeit zu unterstützen:
Das obige ist der detaillierte Inhalt vonAbschlüsse in JavaScript verstehen: Von Verwirrung zu Klarheit. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!