我有一个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');
two
在one
之前记录。
我假设您有一堆其他事情正在运行,并且通过排队animate
,您可以让执行等到其他事情完成。
https://developer.mozilla.org/en/DOM/window.setTimeout 有一些关于setTimeout
夹紧的信息。请参阅"最小延迟"部分。