the*_*en 2 javascript arguments loops for-loop settimeout
我正在尝试学习如何在javacript for循环中将参数传递给setTimeout.这是示例代码.正如它目前所写的那样,setTimeout每次传递的精确度都相同,而不是反映实际在数组中的不同i.
var a=100;
for (i in array)
{
setTimeout("do_stuff(i, a)"), 2000);
}
Run Code Online (Sandbox Code Playgroud)
(我在这里看到了一些类似的问题和答案,但代码示例要复杂得多.回答这个最基本的例子可以帮助其他人解决同样的问题.谢谢!)
要使用字符串(您不应该这样做),您需要这样做:
var a=100;
for (i in array)
{
setTimeout("do_stuff(" + i + ", a)"), 2000);
}
Run Code Online (Sandbox Code Playgroud)
一个更好的答案是将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);
}
Run Code Online (Sandbox Code Playgroud)
现在do_stuff() 返回一个函数,该函数具有对new i和a变量的作用域引用.因为每次调用do_stuff都有自己的作用域,所以返回的函数将引用正确的值.
编辑: 关闭主题,但如果array实际上是一个Array,那么你真的不应该使用,for-in因为这是枚举的意思.使用数组,您通常需要迭代数字索引,因此应使用标准for循环.