可能重复:
Javascript closure inside loops - simple practical example
我想在迭代列表项数组时输出数组中的悬停位置。然而,我的逻辑是完全错误的,因为' i'在循环完成时总是设置为数组的长度,因此我总是得到数组长度值而不是数组中所需的位置。
我需要获取包含相应列表项目编号的警报。
HTML
<ul>
<li class='listItem'>listitem1</li>
<li class='listItem'>listitem2</li>
<li class='listItem'>listitem3</li>
</ul>
JS
var arr = document.getElementsByClassName('listItem');
for (var i = 0; i < arr.length; i++) {
arr[i].onmouseover = function() {
alert(i);
}
}
提前致谢!
答案 0 :(得分:3)
var arr = document.getElementsByClassName('listItem');
for (var i = 0; i < arr.length; i++) {
(function(i) {
arr[i].onmouseover = function() {
alert(i);
}
}(i));
}
阅读this duplicate,找出原因/工作原理。
答案 1 :(得分:2)
您需要closure:
var arr = document.getElementsByClassName('listItem');
for (var i = 0; i < arr.length; i++) {
arr[i].onmouseover = (function(x) {
return function() {
alert(x);
};
}(i));
}