【发布时间】:2013-05-27 01:37:45
【问题描述】:
我试图了解向事件侦听器添加函数时的区别以及它的含义。
var buttons = document.getElementsByTagName('button');
for (i = 0, len = 3; i < len; i++) {
var log = function(e) {
console.log(i);
}
buttons[0].addEventListener("click", log);
}
for (i = 0, len = 3; i < len; i++) {
function log(e) {
console.log(i);
}
buttons[1].addEventListener("click", log);
}
第一个按钮触发console.log 3 次,而第二个按钮只触发一次。
在正常情况下向事件侦听器添加函数时为什么以及应该使用什么?
【问题讨论】:
-
对我来说,两个按钮都按预期在您的 jsfiddle 中触发了 3 次。
-
这里有几点需要注意。 1. 你没有声明
i也没有声明len。 2. 块are bad practice中的函数声明,使用函数表达式代替,这就是问题所在。 -
如果有兴趣:这里是您关于 javascript 如何因提升而重新排列代码的小提琴:jsfiddle.net/paptd/4
-
@Fallexe,什么浏览器?(这是一个糟糕的浏览器,因为它不遵循 W 行引用的 W3C 规范。)
-
@user1767586 我没有进行更改以改进您的代码。从表面上看,代码的运行方式与以前相同。我只是想向您展示 javascript 如何在内部重新排列变量声明和函数定义。因此,您发布的代码实际上被解释为就好像它是按照我发布的方式编写的一样。
标签: javascript javascript-events