Heim > Web-Frontend > js-Tutorial > So verwenden Sie js-Verschlüsse in tatsächlichen Projekten

So verwenden Sie js-Verschlüsse in tatsächlichen Projekten

php中世界最好的语言
Freigeben: 2018-06-08 11:08:14
Original
1035 Leute haben es durchsucht

Dieses Mal zeige ich Ihnen, wie Sie js-Verschlüsse in praktischen Projekten verwenden und welche Vorsichtsmaßnahmen für die Verwendung von js-Verschlüssen in praktischen Projekten gelten. Das Folgende ist ein praktischer Fall, schauen wir uns das an.

Ein Abschluss ist eine Sammlung einer Funktion und der Umgebung, die die darin enthaltenen Variablen offenlegt

Einfach ausgedrückt: Abschluss = Funktion + Umgebung

Das erste Beispiel für den Abschluss

function init() {
 var name = 'Mozilla'; // name is a local variable created by init
 function displayName() { // displayName() is the inner function, a closure
 alert(name); // use variable declared in the parent function 
 }
 displayName(); 
}
init();
because inner functions have access to the variables of outer functions, displayName() can access the variable name declared in the parent function, init().
Nach dem Login kopieren

Tatsächlich ist displayName() die Abschlussfunktion innerhalb von init(), und warum können extern definierte Funktionen innerhalb von displayName aufgerufen werden? Was den Variablennamen betrifft, da die interne Funktion von js die Berechtigung hat, die Variablen in der externen Funktion abzurufen.

Zweites Beispiel

var data = [
 {'key':0},
 {'key':1},
 {'key':2}
];
function showKey() {
 for(var i=0;i<data.length;i++) {
   setTimeout(function(){
    //console.log(i); //发现i输出了3次3
   //console.log(this); // 发现 this 指向的是 Window
   data[i].key = data[i].key + 10;
   console.log(data[i].key)
   }, 1000);
 }
}
showKey();
Nach dem Login kopieren

Kann das obige Beispiel 10 11 12 korrekt ausgeben?

Die Antwort lautet: Nein, und es wird ein Syntaxfehler gemeldet....

console.log(i); habe festgestellt, dass ich 3 dreimal ausgegeben habe, das heißt Sagen wir, nach 1000 Millisekunden ist die for-Schleife beendet, wenn die Abschlussfunktion ausgeführt wird. i ist ein fester Wert, der nicht den erwarteten Effekt erzielt.

console.log(this); stellte fest, dass dies auf Window verweist, das heißt, die in der Funktion implementierte Abschlussfunktion wurde in eine globale Funktion konvertiert und im Speicher gespeichert.

Sie müssen also eine andere Ausführungsfunktion definieren

var data = [
 {'key':0},
 {'key':1},
 {'key':2}
];
function showKey() {
 var f1 = function(n){
  data[i].key = data[i].key + 10;
  console.log(data[i].key)
 }
 for(var i=0;i<data.length;i++) {
   setTimeout(f1(i), 1000);
 }
}
showKey();
// 得到预期的 10 11 12
Nach dem Login kopieren

Ich glaube, dass Sie die Methode beherrschen, nachdem Sie den Fall in diesem Artikel gelesen haben. Weitere spannende Informationen finden Sie in anderen verwandten Artikeln zum Thema PHP chinesische Website!

Empfohlene Lektüre:

So verwenden Sie den Website-Generator VuePress

VuePress generiert eine Website

Das obige ist der detaillierte Inhalt vonSo verwenden Sie js-Verschlüsse in tatsächlichen Projekten. 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