標籤:aaa rip 參數 var function 開始 私人化 javascrip 報錯
1.什麼是閉包?
閉包的特點:
- 函數嵌套函數(內建函式、外部函數)
- 內建函式可以引用外部函數的參數或者變數
- 外部函數的參數或變數不會被js的記憶體回收機制收回
function aaa() {
var a = 1;
function bbb() {
alert(a);
}
return bbb;
}
var c = aaa();
c();
=>運算式形式
(function() {
var a = 1;
return function() {
alert(a);
}
})();
2.閉包有什麼好處?
- 希望一個參數或變數長期駐紮在記憶體中(不會被外部函數的記憶體回收機制所回收)
- 避免全域變數的汙染
- 實現私人成員的存在
function aaa() {
var a = 1;
a++;
alert(a);
}
aaa(); //2
aaa(); //2, 每次調用aaa(),a的值都從1開始,如果想每次調用aaa()實現a值得累加,怎麼辦呢?——閉包
=>function aaa() {
var a=1;
function bbb() {
a++;
alert(a);
}
return bbb;
}
var c= aaa();
c(); //2
c(); //3
c(); //4 因為aaa()被執行後,變數a未被記憶體回收機制收回,而是駐紮在記憶體中,所以每次執行bbb(),a值就會在記憶體值得基礎上加1
3.閉包的用法?
var c= (function(){
var a=1;
function aaa() {
a++;
alert(a);
}
function bbb(){
a++;
alert(a);
}
return {
aa : aaa,
bb : bbb
}
})();
c.aa(); //2
c.bb(); //3
alert(a); //報錯,因為a私人化成員
alert(aaa()); //報錯
4.閉包在IE下容易引發記憶體流失
5.閉包的核心是對參數和變數的不會被js記憶體回收機制回收特性的利用。
javascript學習筆記(三)——閉包