Heim > Web-Frontend > js-Tutorial > Hauptteil

Charakteristische Analyse des JS-Abschlusses

小云云
Freigeben: 2018-03-06 13:55:49
Original
1657 Leute haben es durchsucht

Fügen Sie im Body-Tag ein u-Tag mit dem ID-Knoten hinzu. Unter dem ul-Tag befinden sich 5 li-Tags. Wie wird der li-Index eingeblendet, wenn auf verschiedene li-Tags geklickt wird?
1) Zuerst müssen Sie den UL-Knoten var node = document.getElementsById('node') abrufen
2) Holen Sie sich den untergeordneten Knoten unter dem Knoten node var list = node.children
**3) Fügen Sie onclick zum Schleifenereignis des untergeordneten Knotens hinzu (beachten Sie hier, dass es zu Schließungsproblemen kommen wird). for(var i=0;i< list.length; i++){
list[i].onclick = function()console.log(i)}}, wird jedes Mal festgestellt, dass Die Ausgabe beträgt 7. **
4) Analyseausgabe 7, da i mit var als globale Variable deklariert wird, die auf dieselbe Adresse zeigt. Nachdem die Schleife ausgeführt wurde, ist der Wert von i 7, sodass das in jeder Schleife gedruckte Ergebnis 7 ist.
Verwenden Sie zwei Möglichkeiten, um das Problem zu lösen: 1) Deklarieren Sie Bereichsvariablen auf Blockebene und verwenden Sie let j = i jedes Mal, wenn i wird übergeben, übernehmen.

let j = i; 
list[i].onclick = function(){console.log(j)}
Nach dem Login kopieren

In der Funktionsmethode wird die Variable j auf Blockebene aufgerufen, und diese Variable wird nicht durch Müll gesammelt. Jede for-Schleife zeigt auf eine andere Adresse, sodass der Index korrekt gedruckt werden kann, wenn das Klickereignis ausgelöst wird. 2) Verwenden Sie Abschlüsse, um das Problem zu lösen.

list[i].onclick = function(i){ 
return function(){console.log(i)}。 
}
Nach dem Login kopieren

**Interpretation von Abschlüssen
Ein Abschluss ist eine Funktion, die die internen Variablen anderer Funktionen lesen kann. In der JavaScript-Sprache können nur Unterfunktionen innerhalb einer Funktion lokale Variablen lesen. Abschlüsse können einfach als „innerhalb einer Funktion definierte Funktionen“ verstanden werden. Im Wesentlichen ist ein Abschluss eine Brücke, die das Innere einer Funktion mit der Außenseite der Funktion verbindet.

Hinweis: Die Verwendung von Abschlüssen führt dazu, dass die Variablen in der Funktion im Speicher gespeichert werden, was viel Speicher verbraucht. Daher können Abschlüsse nicht missbraucht werden, was zu Leistungsproblemen auf der Webseite führen und Speicher verursachen kann Probleme in IE-Browsern. . Die endgültige Lösung besteht darin, alle nicht verwendeten lokalen Variablen zu löschen, bevor die Funktion beendet wird.

Verwenden Sie die Beispiele anderer Leute. Als Referenz

var name = "this window";
var object = {
    name :"my object",
    getNameFunc:function () {
        return function () {
            return this.name;
        }
    }
}
alert(object.getNameFunc()());/弹出this window2 。此时this对象指向window对象
var object2 = {
    name: "my object",
    getNameFunc2: function () {
        var that = th is;
        return function () {
            return that.name;
        }
    }
}
alert(‘that’+object2.getNameFunc2()()); ///弹出my object。此时this对象指向object2对象
Nach dem Login kopieren

Verwandte Empfehlungen:

Ein einfaches Verständnis von JS-Verschlüssen

Detaillierte Erklärung gängiger Formen von JS-Verschlüssen

Beispielcode-Sharing für die Verwendung von JS-Schließungen

Das obige ist der detaillierte Inhalt vonCharakteristische Analyse des JS-Abschlusses. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage