JavaScript 中的闭包
可能的重复:
将值传递给 onclick
我有 100 个带有 ID divNum0
的元素。 ..,divNum99
。每次单击时都应使用正确的参数调用doTask
。
不幸的是,下面的代码没有关闭 i,因此为所有元素调用 doTask
并使用 100。
function doTask(x) {alert(x);}
for (var i=0; i<100; ++i) {
document.getElementById('divNum'+i).addEventListener('click',function() {doTask(i);},false);
}
有什么办法可以让函数使用正确的参数调用吗?
Possible Duplicate:
Passing values to onclick
I have 100 elements with ids divNum0
,...,divNum99
. Each when clicked should call doTask
with the right parameter.
The code below unfortunately does not close i, and hence doTask
is called with 100 for all the elements.
function doTask(x) {alert(x);}
for (var i=0; i<100; ++i) {
document.getElementById('divNum'+i).addEventListener('click',function() {doTask(i);},false);
}
Is there someway I can make the function called with right parameters?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
虽然(正确的)答案是重复,但我想指出一个更高级的答案方法 - 用迭代器替换循环,有效解决 javascript“后期绑定”闭包问题。
Although the (correct) answer is the duplicate, I'd like to point out a more advanced method - replacing loops with iterators, which effectively solves javascript "late-bound" closures problem.
通过自执行函数文字(或命名工厂函数)创建闭包
或使用 DOM 节点进行信息存储。
后者更节省内存,因为不会创建多余的函数对象。
Create a closure via a self-executing function literal (or a named factory function)
or use the DOM node for information storage
The latter is more memory-friendly as no superfluous function objects are created.