1

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

4

2 回答 2

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你正在让执行等到其他事情完成。

于 2012-06-18T18:34:12.410 回答
1

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

于 2012-06-18T18:33:48.050 回答