1



setInterval()在Javascript中 使用时,我真的不明白程序的控制流程。
如果我们将一个需要 100ms 时间的函数作为参数传递给SetInterval()方法,时间为 20ms,如下所示

       setInterval(function{
                      for(var i=0;i<1000000;i++)
                           console.log(i)
                           },20);

setInterval()20 毫秒后再次调用它时,会发生什么?
谢谢 :)

添加:简单循环和使用 setInterval 循环和使用 clearInterval 停止之间的主要区别是什么?
检查这个http://www.sitepoint.com/multi-threading-javascript/

4

3 回答 3

1

首先让我们从修复您的 javascript 开始,因为您缺少一些右括号:

setInterval(function() {
    for(var i = 0; i < 1000000; i++) {
        console.log(i);
    }
}, 20);

这相当于以下内容:

function loopAndDump() {
   for(var i = 0; i < 1000000; i++) {
       console.log(i);
    }
}

setInterval(loopAndDump, 20);

或者:

setInterval(function() { loopAndDump(); }, 20);

现在更容易理解发生了什么:该loopAndDump函数每隔 20 毫秒定期调用一次。这个函数简单地从 0 循环到 1000000 并将计数器转储到控制台。如果你想阻止这个进程定期执行函数,你可以使用stopInterval函数并将 setInterval 函数返回的结果作为参数传递。

如果你只想执行一次函数,那么你可以使用setTimeout方法:

setTimeout(function() {
    for(var i = 0; i < 1000000; i++) {
        console.log(i);
    }
}, 20);

现在循环将只执行一次,在 javascript 解释器到达 setTimeout 行后 20 毫秒。

于 2012-09-15T16:28:31.853 回答
1

setInterval是一个 Javascript 计时器。永远记住:在 Javascript 中,定时器延迟是不能保证的。由于浏览器中的所有 JavaScript 都在单个线程上执行,因此异步事件仅在执行中有空位时运行。

var some_function = function() { 
    for (var i=0; i < 1000000; i++) { 
        console.log(i); 
    } 
};
setInterval(some_function, 20);

执行此示例时,JavaScript 启动计时器并在 20 毫秒内执行some_function

假设它需要 100 毫秒some_function才能完成,那么当函数完成执行后大约 100 毫秒会发生什么,JavaScript 会环顾四周,看看等待执行的内容。

它会发现在setInterval开始执行后约 20 毫秒,收到了另一个执行请求some_function(由 设置的计时器setInterval)。在收到命令时,由于 JavaScript 正忙于运行,因此无法执行some_function

由于没有任何东西阻止setInterval操作发生,JavaScript 将重新执行它。自 setInterval 计时器启动以来已过去约 120 毫秒,您some_function显然将连续执行。

于 2012-09-15T16:49:15.880 回答
0

20 毫秒后不会再次调用它。

Javascript 是严格的单线程的,所以只要你的函数在运行,就不会处理任何事件。间隔计时器将在 20 毫秒后触发一个事件,但在您的函数完成之前不会处理它。

于 2012-09-15T16:34:40.893 回答