【问题标题】:Passing argument to setTimeout in a for loop在 for 循环中将参数传递给 setTimeout
【发布时间】:2011-09-27 17:35:59
【问题描述】:

我正在尝试学习如何在 javacript for 循环中将参数传递给 setTimeout。这是示例代码。正如目前所写的那样,setTimeout 每次传递的都是完全相同的 i,而不是反映数组中实际存在的不同 i。

var a=100;
for (i in array)
{   
    setTimeout("do_stuff(i, a)"), 2000);    
}

(我在这里看到了一些类似的问题和答案,但代码示例要复杂得多。回答这个最基本的示例可以帮助其他人解决同样的问题。谢谢!!!)

【问题讨论】:

  • 请注意,for(x in y) 不会按照您的预期进行,并且不适用于迭代数组
  • @then:您似乎失去了帐户访问权限并创建了一个新帐户 - 将此标记为版主以合并您的帐户。然后您可以接受最佳答案。

标签: javascript loops for-loop arguments settimeout


【解决方案1】:

要使用字符串(你不应该这样做),你需要这样做:

var a=100;
for (i in array)
{   
    setTimeout("do_stuff(" + i + ", a)"), 2000);    
}

更好的答案是在新函数调用中限定i 变量的范围,该函数返回一个匿名函数以提供给setTimeout()

function do_stuff( i, a ) {
    return function() {
        // do something with i and a
    }
}

var a=100;
for (i in array)
{   
    setTimeout(do_stuff( i , a ), 2000);    
}

现在do_stuff() 返回一个函数,该函数具有对新ia 变量的范围引用。因为对do_stuff 的每次调用都有自己的范围,所以您返回的函数将引用正确的值。


编辑: 题外话,但如果array 实际上是Array,那么你真的不应该使用for-in,因为那是为了枚举强>。对于数组,您通常需要数字索引的迭代,因此应该使用标准的for 循环。

【讨论】:

    猜你喜欢
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-13
    • 2018-10-15
    • 2023-03-12
    • 1970-01-01
    • 2017-04-01
    相关资源
    最近更新 更多