关于for循环与闭包的一点点点笔记

来源:互联网 发布:一淘和淘宝联盟转换 编辑:程序博客网 时间:2024/04/30 01:16

今天做关于选项卡的练习时,遇到了有关闭包的一个小问题,记录之。

for(var i=0;i<5;i++){   alert(i);   //0,1,2,3,4;}

然而,在循环内部添加事件函数时

 for(var i=0;i<5;i++){    arr[i].onclick=function(){          alert(i);  //5;     } }

弹出的并不是我所盼望的0,1,2,3,4,而是5。因为在执行点击事件时,for循环已经执行完毕,此时闭包中的i向上查找,找到的就是循环结束后的变量i,即为5。

for(var i=0;i<5;i++){}alert(i)  //5;

解决方案1:在循环内,将i作为数组的一个属性保存起来;

for(var i=0;i<5;i++){  arr[i].index=i;  arr[i].onclick=function(){      alert(this.index);    //0,1,2,3,4   }}

解决方案2:再加一层闭包,而i作为参数传递给内部函数;

for(var i=0;i<5;i++){  (function(arg){     arr[i].onclick=function(){       alert(arg); //0,1,2,3,4     }  })(i)}

看来有关闭包方面的知识,还得再好好学习一下咯

0 0