javascript for循环中的闭包
2012-09-21 19:54
477 查看
<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); }; })();
还有很多的解决办法:
/article/4664144.html
相关文章推荐
- 采用自执行的匿名函数解决for循环使用闭包的问题
- JavaScript 利用for-in循环数组或对象
- 深入了解 JavaScript 中的 for 循环
- JavaScript For 循环
- JavaScript 巧用for循环
- JavaScript里的循环方法:forEach,for-in,for-of
- Effective JavaScript Item 49 对于数组遍历,优先使用for循环,而不是for..in循环
- JavaScript的闭包特性 如何给循环中的对象添加事件
- 关于javascript中for/in循环的标签使用
- 170106、用9种办法解决 JS 闭包经典面试题之 for 循环取 i
- JavaScript探秘:for-in循环(for-in Loops)
- SharePoint 自定义的列表页面中添加javascript的一个 For循环语句后,该页面就打不开了。
- 三重for循环实现对二维数组的按列排序(JavaScript)
- 如何给循环中的对象添加事件--深入理解JavaScript的闭包特性
- JavaScript For 循环
- javascript中的循环语句for语句深入理解
- 在JavaScript中用for循环输出等腰、直角三角形、菱形
- JavaScript传统for循环实例
- javascript 循环速度 for loop || while loop