封閉函數(shù)
封閉函數(shù)是javascript中匿名函數(shù)的另外一種寫法,創(chuàng)建一個一開始就執(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ù)定義前加上“~”和“!”等符號來定義匿名函數(shù)
!function(){
var oDiv = document.getElementById('div1');
oDiv.style.color = 'red';
}()
閉包
什么是閉包
函數(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)存當(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、私有變量計數(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>