封閉函數(shù)
封閉函數(shù)是javascript中匿名函數(shù)的另外一種寫(xiě)法,創(chuàng)建一個(gè)一開(kāi)始就執(zhí)行而不用命名的函數(shù)祭往。
一般定義的函數(shù)和執(zhí)行函數(shù):
function changecolor(){
var oDiv = document.getElementById('div1');
oDiv.style.color = 'red';
}
changecolor();
封閉函數(shù):
(function(){
var oDiv = document.getElementById('div1');
oDiv.style.color = 'red';
})();
還可以在函數(shù)定義前加上“~”和“!”等符號(hào)來(lái)定義匿名函數(shù)
!function(){
var oDiv = document.getElementById('div1');
oDiv.style.color = 'red';
}()
什么是閉包
函數(shù)嵌套函數(shù)爹凹,內(nèi)部函數(shù)可以引用外部函數(shù)的參數(shù)和變量衫樊,參數(shù)和變量不會(huì)被垃圾回收機(jī)制收回
function aaa(a){
var b = 5;
function bbb(){
a++;
b++;
alert(a);
alert(b);
}
return bbb;
}
var ccc = aaa(2);
ccc();
ccc();
改寫(xiě)成封閉函數(shù)的形式:
var ccc = (function(a){
var b = 5;
function bbb(){
a++;
b++;
alert(a);
alert(b);
}
return bbb;
})(2);
ccc();
ccc();
用處
1了罪、將一個(gè)變量長(zhǎng)期駐扎在內(nèi)存當(dāng)中锭环,可用于循環(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、私有變量計(jì)數(shù)器泊藕,外部無(wú)法訪問(wèn)辅辩,避免全局變量的污染
<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>