什麼是閉包?為什麼使用閉包?閉包的缺點?
- 2019 年 11 月 12 日
- 筆記
閉包:即重用一個變數,又保護變數不被污染的一種機制。
為什麼使用閉包 : 全局變數和局部變數都具有不可兼得的優缺點。
全局變數: 優: 可重用, 缺: 易被污染。
局部變數: 優: 僅函數內可用,不會被污染。
缺: 不可重用!
何時使用: 只要即重用一個變數,又保護變數不被污染時。
如何: 3步:
1. 用外層函數包裹要保護的變數和內層函數。
2. 外層函數將內層函數返回到外部。
3. 調用外層函數,獲得內層函數的對象,保存在外部的變數中——形成了閉包。
閉包形成的原因: 外層函數調用後,外層函數的函數作用域(AO)對象無法釋放,被內層函數引用著。
閉包的缺點:
比普通函數佔用更多的記憶體。
解決:閉包不在使用時,要及時釋放。
將引用內層函數對象的變數賦值為null。
<script> //1. 用外層函數包裹要保護的變數和內層函數 function outer(){ var i=1; //2. 外層函數返回內層函數對象到外部 return function(){ console.log(i++); } } //3. 調用外層函數獲得內層函數對象 var getNum=outer(); //getNum:function(){ console.log(i++); } getNum();//1 getNum();//2 i=1; getNum();//3 getNum();//4 </script>







