2011-07-03 67 views
2

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

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

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

+1

请注意'for(x in y)'不符合您的期望,并且不能用于迭代数组 –

+0

@then:您似乎失去了您的帐户访问权限并创建了新的帐户 - 标志这为主持人合并您的帐户。然后你可以接受最好的答案。 –

回答

5

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

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

一个更好的答案会是范围i变量在一个新的函数调用,它返回一个不久ymous函数给予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循环。