<a href="#">link1</a> <a href="#">link2</a> <a href="#">link3</a> <script> function main(links) { for (var i=0; i<links.length; i++) { links[i].onclick = function() { alert(i+1); } } }; main(document.getElementsByTagName("a")); </script>
注意我们的links.length为3;0 1 2
可是实际运行时点击任何一个链接都是 4.
为什么?
因为当闭包函数被调用时,他引用的是最后一次的赋值。
解决办法:
links[i].onclick=(function(j){ return function(){ alert(j+1); } })(i); }
用一个匿名函数来激发作用域:
(function(){
var tmp=i; links[i].onclick=function(){ alert(tmp+1); }; })();
还有很多的解决办法:
http://www.cnblogs.com/snandy/archive/2011/03/01/1967628.html
lua中for循环 绑定事件也有这个问题。
for i=1,,100 do
btn :addEventListenr(function()
console.log(i);
end)
打印的i也是最后一个值。