JavaScript-SetTimeout()-动画

JavaScript-SetTimeout()-动画,javascript,animation,recursion,Javascript,Animation,Recursion,今天我两次遇到以下代码片段: function draw() { setTimeout(draw, 100); // Drawing code goes here } draw(); 如果绘图部分花费的时间超过100毫秒,则此代码必须不同步?我完全同意您的看法,这不是最佳做法,它肯定会导致交叉调用。要快速“修补”它,您可以创建一个外部锁(如果不是全局锁),以标记上一次执行已经完成了它的工作,如果不是,就退出 对于动画,更好的解决方案是使用本机函数,正如。所指出的,尝试使用req

今天我两次遇到以下代码片段:

function draw() {
    setTimeout(draw, 100);
    // Drawing code goes here
}
draw();

如果绘图部分花费的时间超过100毫秒,则此代码必须不同步?

我完全同意您的看法,这不是最佳做法,它肯定会导致交叉调用。要快速“修补”它,您可以创建一个外部锁(如果不是全局锁),以标记上一次执行已经完成了它的工作,如果不是,就退出


对于动画,更好的解决方案是使用本机函数,正如。

所指出的,尝试使用
requestAnimationFrame
而不是执行
setTimeout
Yes,当然不仅仅是因为绘图代码错误或延迟。这只是因为如果navigator/OS忙,settimeout可能会超时或延迟。你在寻找一种更精确的方法来实现它吗?
draw
不应该在函数结束时回想一下自己吗?完全正确,我在答案中添加了你的建议。我只是想验证我的假设,我知道requestAnimationFrame-无论如何,感谢你的保证!