如何动态创建多个setInterval()?

时间:2014-11-25 17:48:18

标签: javascript for-loop setinterval

我有一个脚本需要每个对象多次运行一个函数,但是用户在一个变量中设置了对象的数量。

它会像这样工作

dothis(1);
dothis(2);
dothis(3);

然而,这不起作用

for (var i = 0; i < howMany; i++)
{
    setInterval(
        function()
        {
            dothis(i);
        },
        (Math.floor(Math.random() * 10) + 1)
    );
}

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?