閉包:即重用一個變量,又保護變量不被污染的一種機制。
為什么使用閉包 : 全局變量和局部變量都具有不可兼得的優缺點。
全局變量: 優: 可重用, 缺: 易被污染。
局部變量: 優: 僅函數內可用,不會被污染。
缺: 不可重用!
何時使用: 只要即重用一個變量,又保護變量不被污染時。
如何: 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>








