我正在尝试学习如何在javacript for循环中将参数传递给setTimeout。这是示例代码。正如目前所写的那样,setTimeout每次传递的次数与我完全相同,并没有反映出数组中实际存在的不同。
var a=100;
for (i in array)
{
setTimeout("do_stuff(i, a)"), 2000);
}
(我在这里看到了一些类似的问题和答案,但代码示例要复杂得多。回答这个最基本的例子可以帮助其他人解决同样的问题。谢谢!!!)
答案 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()
返回一个对新i
和a
变量具有范围引用的函数。因为对do_stuff
的每次调用都有自己的范围,所以返回的函数将引用正确的值。
编辑: 关闭主题,但如果array
实际上是Array
,那么您真的不应该使用for-in
,因为这意味着的枚举即可。对于数组,您通常需要迭代的数字索引,因此应使用标准for
循环。