关于javascript:如何动态创建多个setInterval()?

How can I create multiple setInterval()s dynamically?

本问题已经有最佳答案,请猛点这里访问。

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

它会像这样工作

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

但是这不起作用

1
2
3
4
5
6
7
8
9
10
for (var i = 0; i < howMany; i++)
{
    setInterval(
        function()
        {
            dothis(i);
        },
        (Math.floor(Math.random() * 10) + 1)
    );
}


您需要在本地作用域中对i的值进行快照,否则它会在执行时动态"重新生成",这意味着该值将始终为howMany,因为由主函数创建的CPU锁定会阻止您的 setInterval / setTimeout在循环结束前执行的函数。

1
2
3
4
5
6
7
8
9
10
for (var i = 0; i < howMany; i++)
{
    setInterval(
        function(j)
        {
            return function() { dothis(j); };
        }(i),
        (Math.floor(Math.random() * 10) + 1)
    );
}

请参阅JavaScript闭包如何工作? 供进一步参考。