for循环的闭包

来源:互联网 发布:telnet 内网端口不通 编辑:程序博客网 时间:2024/05/16 17:33

当我们用for循环为节点绑定数据或者做其他类似的事情的时候,会发现for循环出来的变量都是最后一个。如下:

function init() {         var a = document.getElementsByTagName("p");         for( var i=0; i<a.length; i++ ) {              a[i].onclick = function() {              alert(i);         }       }     }  

按照我们正常的想法是点击每个P都应该输入相应的i 按顺序就是0 1 2 3 4 ,但是实际情况就是会直接输出的全都是5.这个原因就是因为,当我们点击之后,因为点击事件函数里面并没有i这个变量,所以他就会去父函数里面去找这个i,而这个时候,for循环早已经循环完毕,i也已经到了5.所以我们就会找不到这个想要的i。
那么我们就可以添加一个闭包来传参数。如下:

function init() {         var a = document.getElementsByTagName("p");         for( var i=0; i<a.length; i++ ) {              (         a[i].onclick = function(i) {              alert(i);         )(i)         }       }     }  

这样加一层闭包,我们就可以获取到我们想要的i了。

原创粉丝点击