Dieser Artikel enthält Codebeispiele zu Javascript-Abschlüssen. Freunde in Not können darauf verweisen.
Abschluss
Wenn die innere Funktion nach außen gespeichert wird, wird ein Abschluss generiert. Das Schließen führt dazu, dass die ursprüngliche Bereichskette nicht freigegeben wird, was zu Speicherlecks führt
//内部的函数被返回到外部,必然形成闭包 function a(){ function b(){ var b = 234; console.log(a); } var a = 123; return b; } var demo = a(); demo(); // -->123
function test1(){ var num = 100; function test2(){ num ++; console.log(num); } return test2; } var demo1 = test1(); demo1(); //101 demo1(); //102
// function test(){ var arr = []; for(var i = 0; i < 10; i++){//当i = 10的时候循环停止 arr[i] = function(){ //arr的每一位都是一个函数 console.log(i);//虽然函数已经定义,但未执行 } } return arr; } var myArr = test(); for(var i = 0; i < myArr.length; i++ ){ myArr[i](); }
Wenn die letzte Funktion ausgeführt wird, wird i im AO des Tests aufgerufen
AO{ i = 10; }
Lösung: Führen Sie die Funktion aus sofort
function test() { var arr = []; for(var i = 0; i < 10; i++) { (function(j) { arr[j] = function() { console.log(j); } }(i)) } return arr; } var myArr = test(); for(var i = 0; i < myArr.length; i++) { myArr[i](); }
1. Öffentliche Variablen implementieren
zB: Funktionsakkumulator
function add(){ var count = 0; function demo(){ count ++ ; console.log(count); } return demo; } var counter = add(); counter();
2. Kann zwischengespeichert werden
zB:eater
function test2(){ var food = 'apple'; var obj = { eatFood : function(){ if(food != ""){ console.log("I am eatting " + food); food = ''; }else{ console.log("There is nothing! empty!"); } }, pushFood : function(myFood){ food = myFood; } } return obj; } var obj = test2(); obj.eatFood(); obj.eatFood(); obj.pushFood('banana'); obj.eatFood();
3 .Kapselung und Attributprivatisierung können erreicht werden.
zB: Person();
Das obige ist der detaillierte Inhalt vonCodebeispiele für Javascript-Abschlüsse. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!