为什么setimeout(function(),0)和function()之间有执行时间差?

时间:2012-06-18 18:28:20

标签: javascript animation settimeout

我有一个javascript动画代码 -

function animate(position)
{
    ....

    ....

    if(position++ < xyz){
        animate(position); // ****this is the line that I replace with in the next attempt.
    }


}

执行大约需要1秒钟。但是如果我将暂停功能设置为0时间,则需要大约15秒才能完成。

setTimeout(function(){
            animate(position);
        }, 0);

为什么会出现这种巨大的时差?在代码中我试图在HTML5画布上绘制一些像素。我已经省略了这些代码,使我的问题更加清晰。

2 个答案:

答案 0 :(得分:3)

这样做的原因在于JavaScript内部处理计时器的方式。由于JavaScript是单线程的,因此没有任何内容可以同时运行。将0毫秒传递给setTimeout只会强制该函数在第一个可用时刻运行。 John Resig在http://ejohn.org/blog/how-javascript-timers-work/处就此发表了一篇很好的文章。

您可以通过运行以下命令来查看:

setTimeout(function() {
    console.log('one');
}, 0);
console.log('two');
two之前记录了

one

我假设您正在运行其他一些事情,并且排队animate您正在执行等待,直到其他事情完成。

答案 1 :(得分:1)

https://developer.mozilla.org/en/DOM/window.setTimeout有关setTimeout钳制的一些信息。请参阅“最小延迟”部分。