在for循环中将参数传递给setTimeout

时间:2011-07-03 18:41:17

标签: javascript loops for-loop arguments settimeout

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

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

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

1 个答案:

答案 0 :(得分:5)

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

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循环。