Heim Web-Frontend js-Tutorial Erlernen Sie JS-Verschlüsse in wenigen Minuten

Erlernen Sie JS-Verschlüsse in wenigen Minuten

Jan 24, 2017 am 11:08 AM

Schließung ist ein wichtiges Konzept in Javascript. Für Anfänger ist Schließung ein sehr abstraktes Konzept, insbesondere die Definition in der ECMA-Spezifikation. Ohne praktische Erfahrung ist es schwierig, sie anhand der Definition zu verstehen. Daher wird in diesem Artikel das Konzept des Abschlusses nicht ausführlich beschrieben, sondern direkt auf praktische Informationen eingegangen, sodass Sie den Abschluss in wenigen Minuten erlernen können!

1 Verschlüsse im Überblick

Wenn ich mit einer neuen Technologie in Berührung komme, suche ich als erstes nach dem Democode. Für uns kann das Betrachten von Code das Wesen einer Sache besser verstehen als natürliche Sprache. Tatsächlich gibt es überall Abschlüsse. Die Kerncodes von jQuery und zepto sind beispielsweise alle in einem großen Abschluss enthalten, daher werde ich zuerst den einfachsten und primitivsten Abschluss schreiben, damit Sie Abschlüsse in Ihrem Gehirn generieren können:

function A(){    function B(){
       console.log("Hello Closure!");
    }    return B;
}var C = A();
C();//Hello Closure!
Nach dem Login kopieren

Dies ist der einfachste Verschluss.

Nachdem wir ein vorläufiges Verständnis haben, analysieren wir kurz, wie es sich von gewöhnlichen Funktionen unterscheidet. Der obige Code wird wie folgt in natürliche Sprache übersetzt:

(1) Definieren Sie die gewöhnliche Funktion A

(2) Definieren Sie die gewöhnliche Funktion B

in A (3) Geben Sie B

in A zurück (4) Führen Sie A aus und weisen Sie das Rückgabeergebnis von A der Variablen C

zu

(5) Führen Sie C aus

Um diese 5 Schritte in einem Satz zusammenzufassen:

Die interne Funktion B von Funktion A wird durch eine Variable c außerhalb von Funktion A referenziert.

Die erneute Verarbeitung dieses Satzes wird zur Definition des Abschlusses:

Wenn eine interne Funktion von einer Variablen außerhalb ihrer externen Funktion referenziert wird, wird ein Abschluss gebildet.

Wenn Sie also die oben genannten 5 Schritte ausführen, wurde ein Abschluss definiert!

Das ist Schluss.

2 Der Zweck des Verschlusses

Bevor wir die Funktion des Verschlusses verstehen, wollen wir zunächst den GC-Mechanismus in Javascript verstehen:

In Javascript Wenn auf ein Objekt nicht mehr verwiesen wird, wird das Objekt von GC recycelt, andernfalls wird das Objekt immer im Speicher gespeichert.

Im obigen Beispiel ist B in A definiert, sodass B von A abhängt und die externe Variable C auf B verweist, sodass A indirekt von C referenziert wird.

Mit anderen Worten, A wird von GC nicht recycelt und wird immer im Speicher gespeichert. Um unsere Argumentation zu beweisen, wurde das obige Beispiel leicht verbessert:

function A(){    var count = 0;    function B(){
       count ++;
       console.log(count);
    }    return B;
}var C = A();
C();// 1C();// 2C();// 3
Nach dem Login kopieren

Wenn wir einige Variablen im Modul definieren müssen und möchten, dass diese Variablen gespeichert werden ständig Wenn es sich im Speicher befindet, aber keine globalen Variablen „verschmutzt“, können Sie Abschlüsse verwenden, um dieses Modul zu definieren.

3 High-End-Schreibmethode

Die obige Schreibmethode ist eigentlich die primitivste Schreibmethode, aber in tatsächlichen Anwendungen werden Abschlüsse und anonyme Funktionen zusammen verwendet. Das Folgende ist eine häufig verwendete Methode zum Schreiben eines Abschlusses:

(function(document){    var viewport;    var obj = {
        init:function(id){
           viewport = document.querySelector("#"+id);
        },
        addChild:function(child){
            viewport.appendChild(child);
        },
        removeChild:function(child){
            viewport.removeChild(child);
        }
    }
    window.jView = obj;
})(document);
Nach dem Login kopieren

Die Funktion dieser Komponente besteht darin, einen Container zu initialisieren. Anschließend können Sie dem Container Untercontainer hinzufügen oder einen Behälter entfernen.

Die Funktion ist sehr einfach, aber es gibt noch ein anderes Konzept: die Funktion sofort auszuführen. Ein kurzes Verständnis reicht aus. Es muss verstanden werden, wie diese Schreibmethode die Abschlussfunktion implementiert.

Der obige Code kann in zwei Teile aufgeteilt werden: (function(){}) und (), der erste () ist ein Ausdruck, und dieser Ausdruck selbst ist eine anonyme Funktion, also fügen Sie () nach diesem Ausdruck hinzu, um die Ausführung dieses anonymen Ausdrucks anzuzeigen Funktion.

Der Ausführungsprozess dieses Codes kann also wie folgt zerlegt werden:

var f = function(document){    var viewport;    var obj = {
        init:function(id){
            viewport = document.querySelector("#"+id);
        },
        addChild:function(child){
            viewport.appendChild(child);
        },
        removeChild:function(child){
            viewport.removeChild(child);
        }
    }
    window.jView = obj;
};
f(document);
Nach dem Login kopieren

Es scheint, dass der Schatten des Abschlusses in diesem Code zu sehen ist, aber es gibt ihn Nichts in f Der Rückgabewert scheint die Abschlussbedingungen nicht zu erfüllen. Beachten Sie diesen Code:

window.jView = obj;
Nach dem Login kopieren

obj ist ein in der Funktion f definiertes Objekt und eine Reihe von In diesem Objekt werden Methoden definiert. Durch Ausführen von window.jView = obj wird eine Variable jView im globalen Fensterobjekt definiert und diese Variable auf das obj-Objekt verwiesen, dh die globale Variable jView verweist auf obj und die Funktion im obj-Objekt zum variablen Ansichtsfenster in der Funktion f. Daher wird das Ansichtsfenster in der Funktion f nicht von GC recycelt und das Ansichtsfenster wird immer im Speicher gespeichert, sodass diese Schreibmethode die Bedingungen des Schließens erfüllt.

4 Einfache Zusammenfassung

Dies ist das einfachste Verständnis des Abschlusses, der viel komplizierter ist Ausführungskontext, Aktivierungsobjekt und Betriebsmechanismus des Bereichs und der Bereichskette von JS. Als Anfänger müssen Sie diese jedoch zunächst nicht verstehen. Wenn Sie sie häufiger verwenden, werden Sie natürlich ein tieferes Verständnis für Abschlüsse haben.

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)
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Will R.E.P.O. Crossplay haben?
1 Monate 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)

Empfohlen: Ausgezeichnetes JS-Open-Source-Projekt zur Gesichtserkennung und -erkennung Empfohlen: Ausgezeichnetes JS-Open-Source-Projekt zur Gesichtserkennung und -erkennung Apr 03, 2024 am 11:55 AM

Die Technologie zur Gesichtserkennung und -erkennung ist bereits eine relativ ausgereifte und weit verbreitete Technologie. Derzeit ist JS die am weitesten verbreitete Internetanwendungssprache. Die Implementierung der Gesichtserkennung und -erkennung im Web-Frontend hat im Vergleich zur Back-End-Gesichtserkennung Vor- und Nachteile. Zu den Vorteilen gehören die Reduzierung der Netzwerkinteraktion und die Echtzeiterkennung, was die Wartezeit des Benutzers erheblich verkürzt und das Benutzererlebnis verbessert. Die Nachteile sind: Es ist durch die Größe des Modells begrenzt und auch die Genauigkeit ist begrenzt. Wie implementiert man mit js die Gesichtserkennung im Web? Um die Gesichtserkennung im Web zu implementieren, müssen Sie mit verwandten Programmiersprachen und -technologien wie JavaScript, HTML, CSS, WebRTC usw. vertraut sein. Gleichzeitig müssen Sie auch relevante Technologien für Computer Vision und künstliche Intelligenz beherrschen. Dies ist aufgrund des Designs der Webseite erwähnenswert

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.

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.

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.

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

Die Beziehung zwischen js und vue Die Beziehung zwischen js und vue Mar 11, 2024 pm 05:21 PM

Die Beziehung zwischen js und vue: 1. JS als Eckpfeiler der Webentwicklung; 2. Der Aufstieg von Vue.js als Front-End-Framework; 3. Die komplementäre Beziehung zwischen JS und Vue; Vue.

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.

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.

See all articles