我有一个脚本需要每个对象多次运行一个函数,但是用户在一个变量中设置了对象的数量。
它会像这样工作
dothis(1);
dothis(2);
dothis(3);
然而,这不起作用
for (var i = 0; i < howMany; i++)
{
setInterval(
function()
{
dothis(i);
},
(Math.floor(Math.random() * 10) + 1)
);
}
答案 0 :(得分:2)
您需要在本地范围内对i
的值进行快照,否则它会在执行时动态“重新生成”,这意味着该值将始终为howMany
,因为已创建CPU锁定通过main函数,阻止您的setInterval
/ setTimeout
函数在循环结束之前执行。
for (var i = 0; i < howMany; i++)
{
setInterval(
function(j)
{
return function() { dothis(j); };
}(i),
(Math.floor(Math.random() * 10) + 1)
);
}
有关详细信息,请参阅How do JavaScript closures work?。