javascript - Javascript 中的闭包

标签 javascript loops greasemonkey closures

<分区>

Possible Duplicate:
Passing values to onclick

我有 100 个 ID 为 divNum0,...,divNum99 的元素。每次单击时都应使用正确的参数调用 doTask

不幸的是,下面的代码没有关闭 i,因此 doTask 为所有元素调用了 100。

函数 doTask(x) {alert(x);}

对于 (var i=0; i<100;++i) {
    document.getElementById('divNum'+i).addEventListener('click',function() {doTask(i);},false);
}

有什么方法可以让函数使用正确的参数调用吗?

最佳答案

尽管(正确的)答案是 the duplicate ,我想指出一个更高级的方法——用迭代器替换循环,它有效地解决了 javascript 的“后期绑定(bind)”闭包问题。

loop = function(start, end, step, body) {
    for(var i = start; i != end; i += step)
       body(i)
}

loop(1, 100, 1, function(i) {
   // your binding stuff
})

关于javascript - Javascript 中的闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1734749/

相关文章:

javascript - Greasemonkey 脚本用于更改 URL 中的变量

regex - 替换 Greasemonkey 中的部分 URL

php - html-select <选项选择 =""> 不起作用

c++ - 为什么这个 C++ 函数会产生困惑的输出?

javascript - 根据内部数组值跳过 JSON 数据记录 - D3

javascript - 如何从 Eventreference 打印出所有事件名称 |使用 JavaScript 的 MDN 页面?

C while循环无限循环EOF不起作用

javascript - 未定义 EncodeURI 组件

php - 为什么我必须在 Javascript 中转义和第二个 $ 符号?

javascript - 与 Greensock 进行 react - 请 gsap.registerPlugin(CSSPlugin, CSSRulePlugin)