Detaillierte Erklärung von Javascript-Closures und -Anwendungen

Detaillierte Erklärung von Javascript-Closures und -Anwendungen

Vorwort

Javascript-Closures sind im Lernprozess im Allgemeinen schwer zu verstehen. Dieser Artikel stellt Closures unter den Gesichtspunkten vor, was Closures sind, gängige Closure-Beispiele, Closure-Funktionen, Closure-Anwendungen und Closure-Probleme. Ich hoffe, er kann Ihnen ein tieferes Verständnis vermitteln. Bitte weisen Sie auf etwaige Unangemessenheiten hin. Vielen Dank.

1. Was ist ein Abschluss?

Ein Abschluss ist eine verschachtelte innere (untergeordnete) Funktion, die auf Daten im Gültigkeitsbereich der übergeordneten Funktion verweist, wodurch ein Abschluss erstellt wird.

Wichtige Erkenntnisse:

1. Zum Generieren von Closures sind verschachtelte Funktionen erforderlich
2. Closures sind Funktionen und verschachtelte innere Funktionen
3. Funktionen innerhalb von Closures müssen auf Daten im übergeordneten Funktionsumfang verweisen

Wenn die oben genannten Bedingungen nicht erfüllt sind, kann kein Abschluss generiert werden. Das folgende Beispiel veranschaulicht dies.

1.1 Abschluss erfüllt bedingten Code

<Skript>
			Funktion Person () {
				var name='Marschall';
				function student(){ //Unterfunktion deklarieren console.log(name);//Verweise auf den Variablennamen im Gültigkeitsbereich der übergeordneten Funktion
				}
			}
			person(); //Funktionsausführung, Abschluss generieren </script>      

Bildbeschreibung hier einfügen

1.2 Abschlussgenerierungszeit

	<Skript>
			Funktion Person () {
				var name='marshal'; //Wenn js diese Zeile ausführt, wird ein Abschluss generiert function student(){ //Unterfunktion deklarieren console.log(name); //Variablennamen im Gültigkeitsbereich der übergeordneten Funktion referenzieren
				}
				student(); //Interne Funktion wird in externer Funktion aufgerufen }
			person(); //Funktionsausführung, obwohl die Abschlussbedingung erfüllt ist, wird kein Abschluss generiert </script>

Bildbeschreibung hier einfügen

Zeitpunkt der Abschlussgenerierung: Der Codeblock der verschachtelten Unterfunktion verweist auf die Daten im übergeordneten Funktionsumfang, und der Abschluss wird generiert, wenn der Kontext erstellt wird, bevor die verschachtelte Unterfunktion ausgeführt wird. Oder einfacher ausgedrückt: Wenn die verschachtelte Unterfunktion extern ausgeführt wird, wird in diesem Moment ein Abschluss generiert.

<Skript>
			Funktion Person () {
				var name='Marschall';
				Funktion Student () {
					console.log(name); //Diese Methode enthält Abschlusscode }
				wiederkehrender Student;
			}
			var p = person ();// Da das Unterfunktionsobjekt erstellt wird, wird zu diesem Zeitpunkt der erste Abschluss generiert und der Unterfunktionsstudent wird an p zurückgegeben. Da p nicht verschwindet, wird der von der Unterfunktion referenzierte Variablenname im Speicher gespeichert, bis p = null zurückgesetzt wird p ();// Führe den Abschlusscodeblock der Unterfunktion aus und gib "marhsal" aus.
			p(); //Führe den Closure-Codeblock der Unterfunktion zum zweiten Mal aus und gib „marhsal“ aus.
			person(); //Die zweite Unterfunktion wird erstellt, um das Objekt aufzurufen. Zu diesem Zeitpunkt wird der zweite Abschluss generiert, aber der Codeblock der Unterfunktion „Student“ wird nicht ausgeführt. </script>

2. Häufige Schließungsbeispiele

2.1 Als Argument übergebene Unterfunktion

<Skript>
			Funktion setTimeoutTest(Nachricht,Zeit){
				setzeTimeout(Funktion(){
					alert(message); //Die verschachtelte untergeordnete Funktion verweist auf die Variable message der übergeordneten Funktion und generiert einen Abschluss }, time);
			}  
			setTimeoutTest('Eingabeaufforderung',1000);
		</Skript>

2.2 Zählernutzung (Funktionsrückgabe)

<Skript>
				Funktion zählen(){
					var i=1;
					Funktion add(){
						ich++;
						konsole.log(i);
					}
					zurückgeben hinzufügen;
				}
				var c=count();//Produktionsabschluss c();//2
				c();//3
				c();//4
		</Skript>

3. Abschlusseffekt

3.1 Abschlusseffekt

1) Die untergeordnete Funktion verweist auf die Variablen oder Funktionen der übergeordneten Funktion und der Lebenszyklus wird verlängert

2) Seine Variablen oder Funktionen existieren immer und auf die Werte innerhalb der Funktion kann von außen zugegriffen werden

<Skript>
			Funktion zählen(){
				var i=1;
				Funktion add(){
					ich++;
					konsole.log(i);
				}
				zurückgeben hinzufügen;
			}
			var c=Anzahl();
			c();//2
			c(); //3 i's Lebenszyklus wird verlängert </script>

4. Antrag auf Schließung

4.1 Benutzerdefinierter Kapselungs-JS-Code

Externer JS-Code out.js implementiert Selbstinkrement und Selbstdekrement (Funktion count(){
	var i=1;
	Funktion add(){
		ich++;
		konsole.log(i);
	}
	Funktion subtrahieren(){
		ich--
		konsole.log(i);
	}
	Fenster.Anzahl={
		hinzufügen: hinzufügen,
		subtrahieren:subtrahieren
	}
})();
Referenzieren Sie den out.js-Code <script src=out.js></script>
		<Skript>
			zählen.add(); //2
			zählen.subtrahieren(); //1
			zählen.subtrahieren(); //0
		</Skript>

5. Abschlussproblem

5.1 Verschlüsse und dies

<Skript>
     var name="marshal"; //Globale Variablen erstellen var person={
		 Name:"leo",
		 getName:function(){ //Gibt anonyme Funktion zurück return function(){ //Gibt this.name zurück
				return this.name; //Gibt Zeichenfolge zurück }
		 }
	 };
	 alert(person.getName()()); // Ausgabe-Marshal, interne Funktionen können nicht direkt auf die externe Funktion zugreifen.
	 
</Skript>

Problemumgehung

<Skript>
	     var name="Marschall";
			 var Person = {
				 Name:"leo",
				 getName:Funktion(){
					 var that=this; //Speichere dies in einer anderen Variable, auf die der Abschluss zugreifen kann return function(){
						gib diesen Namen zurück;
					 }
				 }
			 };
			 alert(person.getName()()); //das zeigt auf die Person, nicht auf das Fenster
	</Skript>

5.2 Speicherlecks

Bei der Verwendung von Closures ist die abhängige Variable immer vorhanden und das Objekt muss dereferenziert und auf null gesetzt werden, um sicherzustellen, dass sein Speicher bei Bedarf zurückgefordert werden kann.

Dies ist das Ende dieses Artikels mit der ausführlichen Erklärung von Javascript-Closures und -Anwendungen. Weitere relevante JS-Closures und -Anwendungen finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Erweiterte Closures in JavaScript erklärt
  • JavaScript-Closures erklärt
  • JavaScript-Closures erklärt
  • Javascript-Bereich und Abschlussdetails
  • Detaillierte Erläuterung der JavaScript-Closure-Probleme
  • Detaillierte Erläuterung von Beispielen für JS-Closure- und Garbage-Collection-Mechanismen
  • Analyse des JS-Closure-Prinzips und seiner Anwendungsszenarien
  • Detaillierte Erklärung des Prinzips und der Funktion des JavaScript-Closures

<<:  Lösung für das Problem, dass Ubuntu in der virtuellen Maschine keine Verbindung zum Internet herstellen kann

>>:  MySQL Community Server 5.7.19 Installationshandbuch (detailliert)

Artikel empfehlen

VMware Workstation 14 Pro installiert CentOS 7.0

Die spezifische Methode zur Installation von Cent...

So fügen Sie Div-Elementen abgerundete Ränder hinzu

Wie unten dargestellt: CSS- CodeInhalt in die Zwi...

JavaScript implementiert einen verschiebbaren Fortschrittsbalken

In diesem Artikel wird der spezifische JavaScript...

Leistung des Node+Express-Testservers

Inhaltsverzeichnis 1 Testumgebung 1.1 Server-Hard...

Detaillierte Erklärung des Unterschieds zwischen Tags und Elementen in HTML

Ich glaube, dass es vielen Freunden, die sich mit ...

So bereinigen Sie Ihre Docker-Daten vollständig

Inhaltsverzeichnis Regelmäßig beschneiden Spiegel...

Dieser Artikel zeigt Ihnen, wie Sie mit CSS-Kombinationsselektoren spielen

CSS-Kombinationsselektoren umfassen verschiedene ...

Detaillierte Erklärung zur Verwendung selbstverschachtelter Vue-Baumkomponenten

In diesem Artikel erfahren Sie, wie Sie die selbs...

MySQLs Methode zum Umgang mit doppelten Daten (Verhindern und Löschen)

Einige MySQL-Tabellen können doppelte Datensätze ...

Einige kleine Methoden, die häufig in HTML-Seiten verwendet werden

Fügen Sie das Tag <Head> hinzu <meta http...

Vergleich von CSS-Schatteneffekten: Schlagschatten und Box-Schatten

Drop-Shadow und Box-Shadow sind beide CSS-Eigensc...

In diesem Artikel erfahren Sie mehr über NULL in MySQL

Inhaltsverzeichnis Vorwort NULL in MySQL 2 NULL b...