在数组中迭代时的JS循环位置

JS loop position while iterating through an array

本文关键字:JS 循环 位置 数组 迭代      更新时间:2023-09-26

可能重复:
循环中的Javascript闭包-简单实用的示例

我想在遍历列表项数组时输出数组中的悬停位置。然而,我的逻辑是完全错误的,因为"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);
    }
}

http://jsfiddle.net/EHcDp/4/

提前感谢!

var arr = document.getElementsByClassName('listItem');
for (var i = 0; i < arr.length; i++) {
    (function(i) {
        arr[i].onmouseover = function() {
            alert(i);
        }
    }(i));
}

阅读此副本,了解其工作原理。

您需要一个闭包:

var arr = document.getElementsByClassName('listItem');
for (var i = 0; i < arr.length; i++) {
    arr[i].onmouseover = (function(x) {
        return function() {
            alert(x);
        };
    }(i));
}