for循环JavaScript中的onmouseover事件提供不正确的参数

时间:2017-08-20 01:38:24

标签: javascript function dom

所以,我有一个for循环和一个数组。在该数组中的每个元素都是按钮,我希望它们都有onmouseover个事件。

注意:代码已简化,以表达我的观点。

for(i = 0; i < array.length; i++){
    var button = document.createElement("button");
    button.onmouseover = function() {doSomething(i)};
}

其中doSomething接受一个参数i

当光标悬停在任何一个butttons上时,提供给doSomething - i的参数始终是array的长度,无论光标悬停在哪个按钮上。为什么会发生这种情况,我该怎么做才能确保为函数提供正确的参数?

1 个答案:

答案 0 :(得分:0)

您绑定到变量,而不是其值。即您已成功创建一个闭包,其中所有函数都使用相同的变量i,而不是值为i的新变量。

您需要做的是锁定该值,您可以这样做的一种方法是创建一个函数生成器并使用当前值i调用它。 E.g。

for(i = 0; i < array.length; i++){
    var button = document.createElement("button");
    button.onmouseover = function(inner_i) { return function(){doSomething(inner_i)} }(i);
}