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

我绝对不知道发生了什么。 但是,当我尝试在第12行使用[i]进行迭代时,它不起作用,并且我得到了要写为空白的跨度。 但是,例如,在不进行任何其他更改的情况下,仅将第12行的[i]切换为[0],就可以按预期方式写入跨度了!

有任何想法吗?

$(function() {  
    var listaCoisas = [
        "disruptiva",
        "matadora",
        "feroz",
        "tradicional"
    ];

    var i;
    for (i=0; i<listaCoisas.length; i++){
        setTimeout(function(){
            $('#word-attribute').empty().append(listaCoisas[3]);
        },1000);
    }
});

#1楼 票数:0 已采纳

由于您希望每次迭代都比上一次迭代晚1秒,因此您需要更改setTimeout延迟-使用forEach

listaCoisas.forEach(function(entry, i){ 
    setTimeout(function(){ 
        $('#word-attribute').empty().append(entry); 
    },(i+1) * 1000); 
});

#2楼 票数:0

上述答案在替换代码中的for循环时效果很好,但是仅添加交错的延迟将无法使上面的原始代码正常工作,我认为理解原因很重要。

由于闭包 ,在调用第一个setTimeout时,for循环将已经运行,并且i的值将比数组中的最后一项(第4个索引)多一个。 这意味着什么都不会附加到#word-attribute ,因为它将尝试附加不存在的项目。 如果您在此处打开控制台,则可以看到问题。

如果要保持for循环而不是添加延迟的setTimeouts,可以做几件事:

  1. 如果您使用Babel之类的语言来编译javascript,则可以利用ES6 let关键字,该关键字带有它自己的闭包。 使用let ,而不是vari
  2. 使用匿名函数围绕i变量创建另一个闭包,我们将在匿名函数内调用x setTimeout在被调用时将可以访问i的正确值。

  ask by diegodacal translate from so

未解决问题?本站智能推荐:

1回复

在反应克隆子循环中保留数组索引

我有一个奇怪的问题,就是在循环和克隆反应孩子时无法保留索引。 这是有问题的代码: 现在的问题是,IndexField内的index始终为0,但是在Cell中,它的值还可以,就像我们在循环/闭包中迷路一样,该循环/闭包始终返回所传递变量的最后一个值。 有没有一种干净的方法来优雅地处理此问题
1回复

如何使用循环索引保存/清除setTimeout的数组?

我多次调用for循环。 我想为每个索引保存一个setTimeout。 这个想法是使用循环的索引作为setTimeout的数组索引,但是setTimeout返回一个递增的ID号,我想重置它,或者重写以控制返回的ID,因此我可以始终使用给定的索引标识每个超时在一次又一次执行的循环索引范围内。
2回复

Javascript将对象添加到循环中的外部数组

我正在尝试将动态创建的 Javascript 对象添加到数组中。 我可以遍历 DOM 并创建对象。 但是当显示最终的对象数组时,计数是正确的,但所有对象的值都相同,即最终索引值。 如何摆脱这个问题? PS:DOM 遍历和其他功能运行良好,唯一的问题是创建具有正确值的最终对象数组。 Javascr
2回复

jQuery:单击函数在闭环中绑定到for循环中

我被困在这里,任何提示都会很好。 我有一个Objects objects []数组和divnames []数组。 我的对象上具有play()和stop()之类的功能。 该对象及其功能已在多种情况下进行了测试,它们正在工作。 现在,我正在尝试遍历divnames []并将适当的对象[]的
1回复

执行帖子的Javascript循环,但它只执行循环中的最后一个值

我正在尝试执行多个 id 并将其添加到要执行的对象中。 所以这是来自事件按钮功能: 所以例如trackids是111, 112, 113。它只会执行trackid 113 3次。 我也想执行 111、112。 我尝试了许多不同的关闭方式来处理这些问题,但没有奏效。 我可能做错了什么。 请帮忙。 谢谢
1回复

实现闭包以将数组索引“携带”到另一个数组?[重复]

这个问题已经在这里有了答案: 如何在Javascript中使用循环生成事件处理程序? [重复] 3个答案 根据我在这里收到的答案,看来我需要关闭此代码才能正常工作。 不幸的是,尽管提供了链接,但对于我应该如何实施关闭操作,我仍然感到困惑,因此,当单击特定图像时,将打开该图像
3回复

Javascript:forEach()循环以填充数组-封闭问题

假设我们有一个对象数组,例如: 我想用重量大于100的“水果”数组中的项填充“ heavy_fruits”数组。这是我的代码: 但是显示:名称:“ orange”,重量:160名称:“ orange”,重量:160名称:“ orange”,重量:160名称:“ orange”,重量:16
1回复

使用闭包传递数组值

从另一个函数获取多个本地数组的最佳方法是什么? 我正在做类似的事情。 至于附加到函数的变量名称“ arr1 = f1()”,是否需要将它们声明为local,“ var arr1 = f1()”。