閉包
什么是閉包?
函數(shù)嵌套函數(shù),內(nèi)部函數(shù)可以引用外部函數(shù)的參數(shù)和變量教藻,參數(shù)和變量不會被垃圾回收機制收回
function aaa(a){? ? ?
? ? ? var b = 5;? ? ?
? ? ? function bbb(){
? ? ? ? ? a++;
? ? ? ? ? b++;
? ? ? ? alert(a);
? ? ? ? alert(b);
? ? ? }
? ? ? return bbb;
? }
var ccc = aaa(2);
ccc();
ccc();
改寫成封閉函數(shù)的形式:
var ccc = (function(a){
? var b = 5;
? function bbb(){
? ? ? a++;
? ? ? b++;
? ? alert(a);
? ? alert(b);
? }
? return bbb;
})(2);
ccc();
ccc();
用處?
1膛檀、將一個變量長期駐扎在內(nèi)存當中,可用于循環(huán)中存索引值
<script type="text/javascript">
? ? window.onload = function(){
? ? ? ? var aLi = document.getElementsByTagName('li');
? ? ? ? for(var i=0;i<aLi.length;i++)
? ? ? ? {
? ? ? ? ? ? (function(i){
? ? ? ? ? ? ? ? aLi[i].onclick = function(){
? ? ? ? ? ? ? ? ? ? alert(i);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? })(i);
? ? ? ? }
? ? }
</script>
......
<ul>
? ? <li>111</li>
? ? <li>222</li>
? ? <li>333</li>
? ? <li>444</li>
? ? <li>555</li>
</ul>
2、私有變量計數(shù)器劫乱,外部無法訪問膊畴,避免全局變量的污染
<script type="text/javascript">
var count = (function(){
? ? var a = 0;
? ? function add(){
? ? ? ? a++;
? ? ? ? return a;
? ? }
? ? return add;
})()
count();
count();
var nowcount = count();
alert(nowcount);
</script>