Heim Web-Frontend Front-End-Fragen und Antworten Was bedeutet Javascript-Schließung?

Was bedeutet Javascript-Schließung?

Nov 24, 2021 pm 01:48 PM
javascript 闭包

In JavaScript bezieht sich ein Abschluss auf eine Funktion; wenn zwei Funktionen ineinander verschachtelt sind, ist die innere Funktion ein Abschluss. Ein typischer Abschlusskörper ist eine Funktion mit einer verschachtelten Struktur; die innere Funktion verweist auf die privaten Mitglieder der äußeren Funktion, und gleichzeitig wird auf die innere Funktion verwiesen, wenn die äußere Funktion aufgerufen wird gebildet.

Was bedeutet Javascript-Schließung?

Die Betriebsumgebung dieses Tutorials: Windows 7-System, JavaScript-Version 1.8.5, Dell G3-Computer.

Was ist Schließung?

Die sogenannte Schließung bezieht sich auf eine Funktion. Wenn zwei Funktionen ineinander verschachtelt sind, ist die innere Funktion ein Abschluss.

Grundprinzip der Bildung

Wenn die Funktion aufgerufen wird, wird ein temporäres Kontextaktivitätsobjekt generiert. Es ist das Objekt der obersten Ebene des Funktionsbereichs. Alle privaten Methoden, Variablen, Parameter, privaten Funktionen usw. im Bereich sind als Attribute des kontextaktiven Objekts vorhanden. Nachdem die Funktion

aufgerufen wurde, wird das kontextaktive Objekt standardmäßig sofort freigegeben, um die Belegung von Systemressourcen zu vermeiden. Wenn jedoch auf die privaten Variablen, Parameter, privaten Funktionen usw. innerhalb der Funktion von der Außenwelt verwiesen wird, bleibt das kontextaktive Objekt vorübergehend bestehen, bis alle externen Verweise gelöscht werden.

Der Funktionsumfang ist jedoch geschlossen und für die Außenwelt nicht zugänglich. Unter welchen Umständen kann die Außenwelt also auf private Mitglieder innerhalb einer Funktion zugreifen?

Gemäß der Bereichskette kann die innere Funktion auf die privaten Mitglieder der äußeren Funktion zugreifen. Wenn die innere Funktion auf die privaten Mitglieder der äußeren Funktion verweist und die innere Funktion an die Außenwelt übergeben wird oder für die Außenwelt offen ist, wird ein Abschlusskörper gebildet. Diese externe Funktion ist ein Abschlusskörper. Nach dem Aufruf wird das aktive Objekt nicht vorübergehend gelöscht und seine Eigenschaften bleiben weiterhin bestehen. Die privaten Mitglieder der externen Funktion können kontinuierlich über die interne Funktion gelesen und geschrieben werden.

Verschlussstruktur

Ein typischer Verschlusskörper ist eine Funktion einer verschachtelten Struktur. Die innere Funktion verweist auf die privaten Mitglieder der äußeren Funktion, und gleichzeitig wird auf die innere Funktion von der Außenwelt verwiesen. Wenn die äußere Funktion aufgerufen wird, wird ein Abschluss gebildet. Diese Funktion wird auch Abschlussfunktion genannt.

Das Folgende ist eine typische Verschlussstruktur.

function f(x) {  //外部函数
    return function (y) {  //内部函数,通过返回内部函数,实现外部引用
        return x + y;  //访问外部函数的参数
    };
}
var c = f(5);  //调用外部函数,获取引用内部函数
console.log(c(6));  //调用内部函数,原外部函数的参数继续存在
Nach dem Login kopieren

Der Parsing-Prozess wird wie folgt kurz beschrieben:

  • Während der Vorkompilierungsphase des JavaScript-Skripts werden die deklarierte Funktion f und die Variable c zunächst lexikalisch vorparst.

  • Rufen Sie während der JavaScript-Ausführung die Funktion f auf und übergeben Sie den Wert 5.

  • Beim Parsen der Funktion f werden die Ausführungsumgebung (Funktionsbereich) und das aktive Objekt erstellt und die Parameter, privaten Variablen und internen Funktionen werden den Eigenschaften des aktiven Objekts zugeordnet.

  • Der Wert des Parameters x ist 5, was dem x-Attribut des aktiven Objekts zugeordnet ist.

  • Die innere Funktion referenziert den Parameter x über die Bereichskette, wurde jedoch noch nicht ausgeführt.

  • Nachdem die externe Funktion aufgerufen wurde, kehrt die interne Funktion zurück, wodurch die interne Funktion von der externen Variablen c referenziert wird.

  • Der JavaScript-Parser erkennt, dass auf die Eigenschaften des aktiven Objekts der externen Funktion von der Außenwelt verwiesen wird, und kann die Registrierung des aktiven Objekts nicht aufheben, sodass er weiterhin die Existenz des Objekts im Speicher aufrechterhält.

  • Wenn c aufgerufen wird, dh wenn die innere Funktion aufgerufen wird, können Sie sehen, dass der im Parameter x der äußeren Funktion gespeicherte Wert weiterhin vorhanden ist. Auf diese Weise können nachfolgende Operationen implementiert werden und x+y=5=6=11 wird zurückgegeben.

Der Wert des Abschlusses besteht darin, die Speicherung von Daten während des Ausdrucksvorgangs zu erleichtern. Seine Mängel können jedoch nicht ignoriert werden:

  • Nachdem die Funktion aufgerufen wurde, kann das aufrufende Objekt nicht abgemeldet werden, was Systemressourcen beansprucht. Die übermäßige Verwendung von Schließungen in Skripten kann leicht zu Speicherverlusten führen. Lösung: Verschlüsse mit Vorsicht verwenden und nicht missbrauchen.

  • Aufgrund der Rolle von Abschlüssen sind die von ihnen gespeicherten Werte dynamisch und es kann leicht zu Ausnahmen oder Fehlern kommen, wenn sie nicht richtig behandelt werden.

【Verwandte Empfehlungen: Javascript-Lerntutorial

Das obige ist der detaillierte Inhalt vonWas bedeutet Javascript-Schließung?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Was bedeutet der Abschluss im C++-Lambda-Ausdruck? Was bedeutet der Abschluss im C++-Lambda-Ausdruck? Apr 17, 2024 pm 06:15 PM

In C++ ist ein Abschluss ein Lambda-Ausdruck, der auf externe Variablen zugreifen kann. Um einen Abschluss zu erstellen, erfassen Sie die äußere Variable im Lambda-Ausdruck. Abschlüsse bieten Vorteile wie Wiederverwendbarkeit, Ausblenden von Informationen und verzögerte Auswertung. Sie sind in realen Situationen nützlich, beispielsweise bei Ereignishandlern, bei denen der Abschluss auch dann noch auf die äußeren Variablen zugreifen kann, wenn diese zerstört werden.

Was sind die Vor- und Nachteile von Abschlüssen in C++-Funktionen? Was sind die Vor- und Nachteile von Abschlüssen in C++-Funktionen? Apr 25, 2024 pm 01:33 PM

Ein Abschluss ist eine verschachtelte Funktion, die auf Variablen im Bereich der äußeren Funktion zugreifen kann. Zu ihren Vorteilen gehören Datenkapselung, Zustandserhaltung und Flexibilität. Zu den Nachteilen gehören der Speicherverbrauch, die Auswirkungen auf die Leistung und die Komplexität des Debuggens. Darüber hinaus können Abschlüsse anonyme Funktionen erstellen und diese als Rückrufe oder Argumente an andere Funktionen übergeben.

Wie implementiert man einen Abschluss im C++-Lambda-Ausdruck? Wie implementiert man einen Abschluss im C++-Lambda-Ausdruck? Jun 01, 2024 pm 05:50 PM

C++-Lambda-Ausdrücke unterstützen Abschlüsse, die Funktionsbereichsvariablen speichern und sie für Funktionen zugänglich machen. Die Syntax lautet [capture-list](parameters)->return-type{function-body}. Capture-Liste definiert die zu erfassenden Variablen. Sie können [=] verwenden, um alle lokalen Variablen nach Wert zu erfassen, [&], um alle lokalen Variablen nach Referenz zu erfassen, oder [Variable1, Variable2,...], um bestimmte Variablen zu erfassen. Lambda-Ausdrücke können nur auf erfasste Variablen zugreifen, den ursprünglichen Wert jedoch nicht ändern.

Lösen Sie das durch Schließungen verursachte Speicherverlustproblem Lösen Sie das durch Schließungen verursachte Speicherverlustproblem Feb 18, 2024 pm 03:20 PM

Titel: Durch Abschlüsse und Lösungen verursachte Speicherlecks Einführung: Abschlüsse sind ein sehr verbreitetes Konzept in JavaScript, das internen Funktionen den Zugriff auf Variablen externer Funktionen ermöglicht. Allerdings können Schließungen bei falscher Verwendung zu Speicherverlusten führen. In diesem Artikel wird das durch Schließungen verursachte Speicherverlustproblem untersucht und Lösungen sowie spezifische Codebeispiele bereitgestellt. 1. Durch Schließungen verursachte Speicherlecks Das Merkmal von Schließungen besteht darin, dass interne Funktionen auf Variablen externer Funktionen zugreifen können, was bedeutet, dass in Schließungen referenzierte Variablen nicht durch Müll gesammelt werden. Bei unsachgemäßer Verwendung

Der Einfluss von Funktionszeigern und -abschlüssen auf die Golang-Leistung Der Einfluss von Funktionszeigern und -abschlüssen auf die Golang-Leistung Apr 15, 2024 am 10:36 AM

Die Auswirkungen von Funktionszeigern und -abschlüssen auf die Go-Leistung sind wie folgt: Funktionszeiger: Etwas langsamer als direkte Aufrufe, aber verbessert die Lesbarkeit und Wiederverwendbarkeit. Schließungen: Normalerweise langsamer, kapseln aber Daten und Verhalten. Praktischer Fall: Funktionszeiger können Sortieralgorithmen optimieren und Abschlüsse können Ereignishandler erstellen, aber sie bringen Leistungseinbußen mit sich.

Wie werden Schließungen in Java implementiert? Wie werden Schließungen in Java implementiert? May 03, 2024 pm 12:48 PM

Abschlüsse in Java ermöglichen es inneren Funktionen, auf äußere Bereichsvariablen zuzugreifen, selbst wenn die äußere Funktion beendet wurde. Durch anonyme innere Klassen implementiert, enthält die innere Klasse einen Verweis auf die äußere Klasse und hält die äußeren Variablen aktiv. Schließungen erhöhen die Codeflexibilität, Sie müssen sich jedoch des Risikos von Speicherverlusten bewusst sein, da Verweise auf externe Variablen durch anonyme innere Klassen diese Variablen am Leben halten.

Verkettete Aufrufe und Schließungen von PHP-Funktionen Verkettete Aufrufe und Schließungen von PHP-Funktionen Apr 13, 2024 am 11:18 AM

Ja, die Einfachheit und Lesbarkeit des Codes können durch verkettete Aufrufe und Abschlüsse optimiert werden: Verkettete Aufrufe verknüpfen Funktionsaufrufe in einer fließenden Schnittstelle. Abschlüsse erstellen wiederverwendbare Codeblöcke und greifen auf Variablen außerhalb von Funktionen zu.

Zusammenfassung der Vor- und Nachteile anonymer Golang-Funktionen und -Verschlüsse Zusammenfassung der Vor- und Nachteile anonymer Golang-Funktionen und -Verschlüsse May 05, 2024 am 09:54 AM

Anonyme Funktionen sind prägnant und anonym, weisen jedoch eine schlechte Lesbarkeit und Schwierigkeiten beim Debuggen auf; Schließungen können Daten kapseln und den Status verwalten, können jedoch zu Speicherverbrauch und Zirkelverweisen führen. Praktischer Fall: Anonyme Funktionen können für die einfache numerische Verarbeitung verwendet werden, und Abschlüsse können die Zustandsverwaltung implementieren.

See all articles