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

Why is there a execution time difference between setimeout(function(), 0 ) and function()?

本文关键字:function 执行 执行时间 时间差 之间 setimeout 为什么      更新时间:2023-09-26

我有一个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画布上绘制一些像素。我省略了这些代码,以使我的问题更清楚。

这样做的

原因是 JavaScript 在内部处理计时器的方式。由于 JavaScript 是单线程的,因此不会同时运行任何内容。将 0 毫秒传递给 setTimeout 只会强制函数在第一个可用时刻运行。 约翰·雷西格(John Resig)在 http://ejohn.org/blog/how-javascript-timers-work/对此有一篇很好的文章。

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

setTimeout(function() {
    console.log('one');
}, 0);
console.log('two');

twoone之前记录。

我假设您有一堆其他事情正在运行,并且通过排队animate,您可以让执行等到其他事情完成。

https://developer.mozilla.org/en/DOM/window.setTimeout 有一些关于setTimeout夹紧的信息。请参阅"最小延迟"部分。