循环结果数组的最后一个索引[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了循环结果数组的最后一个索引[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我有以下代码,使用addeventlistener为每个元素添加一个事件

var x, y, z;

elm = elm.normalize();
if(!isobj(elm) && iselm(elm)) {
    elm = new Array(elm);
}

for(x in elm) {
    (function() {
        elm[x].addEventListener('click', function() {
            alert(x);
        });
    })();
}

但是当我点击任何通过循环添加事件的element时,它总是显示最后一个索引example。就像当我点击element时,它会在警告框内显示example文本的警报。

这是console.log(elm)之后的elm = elm.normalize()的结果

[sample:input.sample.fld,example:input.example.fld]

isobj(elm)function来检查variable是否是object,像iselm(elm)一样是function来检查variable是否是element

由于解决这个问题,我试图在循环中使用(function() { /* i put the addEventListener as above */ })();,但仍然无法正常工作。

我已经确保x始终显示索引,但我不知道为什么它总是显示事件中的最后一个索引。

请帮助,谢谢你的建议。

答案

到执行代码行时,for循环已经完成。

解释:https://dzone.com/articles/why-does-javascript-loop-only-use-last-value

如果您的浏览器支持,您可以使用let。 (参见文章的解释和替代方案)

var x, y, z;

elm = elm.normalize();
if(!isobj(elm) && iselm(elm)) {
    elm = new Array(elm);
}

for(x in elm) {
    (function() {
        let myX = x;
        elm[myX].addEventListener('click', function() {
            alert(myX);
        });
    })();

}

以上是关于循环结果数组的最后一个索引[重复]的主要内容,如果未能解决你的问题,请参考以下文章

为啥此代码片段返回意外结果?

for循环中双精度数组的索引超出范围[重复]

Core Data 只保存最后一项

在循环中重新分配数组的最后一个索引

有没有办法循环遍历索引[重复]

减去整数数组的索引的结果[重复]