闭包
//好处 //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>