//好处
//1:希望变量长期住扎内存里
//2:避免全局变量的污染
//3:私有变量的存在
function aaa(){
var a=1;
return function(){
a++;
alert(a);
}
}
//下面这个aaa()是已经执行完他自身了
//赋值给变量b就是调用return返回值
var b=aaa();
b();//2
b();//3
alert(a)//undiefind
var aaa=(function(){
var a=1;
return function(){
a++;
alert(a);
}
})();
aaa();
aaa();
var aLi=document.getElementsByTagName("li");
for(var i=0;i<aLi.length;i++){
aLi[i].onclick=function(){
alert(i)//3 这里等于3是因为外面的for循环一上来就执行完了,最后就返回3
}
}
//改成闭包方式
//闭包的特性之一:外部的变量执行完不会影响内部的所以可以把i当参数传进去
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);
}
}
<ul>
<li>1111</li>
<li>1111</li>
<li>1111</li>
</ul>