js中的閉包技術
阿新 • • 發佈:2020-10-14
1.特點:
-
函式巢狀函式
-
內部的函式可以引用外部函式的引數或者變數
-
引數和變數不會被垃圾回收機制回收,因為內部函式還在引用
function aaa(){
var a = 5;
function bbb(){
console.log(a);
}
return bbb;
}
var c = aaa(); //此時c是aaa內部return的bbb函式體,外部函式aaa已執行完畢,但是變數仍被內部函式引用,故不會釋放。
c(); //列印結果是5
2.好處:
-
變數可以長期駐紮在記憶體之中
-
避免全域性變數的汙染,有私有成員
看下面例子:
1、普通函式呼叫:aaa執行完畢,就回收a變數,再次執行,重新賦值計算。
function aaa(){
var a = 1;
a++;
alert(a);
}
aaa(); //2
aaa(); //2
2、閉包方式呼叫:aaa執行後,由於a變數還在被內部函式引用,故不會被回收,再次計算,在上一次的結果上進行累加。
function aaa(){
var a = 1;
return function(){
a++;
alert(a);
}
}
var c = aaa();
c(); //2
c(); //3