据我所知,这两段 javascript 的行为方式相同:
选项 A:
function myTimeoutFunction() { doStuff(); setTimeout(myTimeoutFunction, 1000); } myTimeoutFunction();
选项 B:
function myTimeoutFunction() { doStuff(); } myTimeoutFunction(); setInterval(myTimeoutFunction, 1000);
使用setTimeout和setInterval有什么区别吗?
他们基本上尝试做同样的事情,但这种setInterval方法会比这种setTimeout方法更准确,因为setTimeout等待 1000 毫秒,运行函数,然后设置另一个超时。所以等待时间实际上比 1000 毫秒多一点(如果你的函数需要很长时间才能执行,那么等待时间会更长)。
setInterval
setTimeout
尽管有人可能认为它setInterval会每 1000 毫秒执行一次,但重要的是要注意这也会延迟,因为 JavaScript 不是setInterval一种多线程语言,这意味着 - 如果脚本的其他部分正在运行 - 间隔将有等待完成。
在这个 Fiddle中,您可以清楚地看到超时将落后,而时间间隔几乎一直是 1 次调用/秒(脚本试图这样做)。如果将顶部的速度变量更改为 20 之类的小值(这意味着它将尝试每秒运行 50 次),则间隔永远不会达到平均每秒 50 次迭代。
延迟几乎总是可以忽略不计,但如果你正在编程非常精确的东西,你应该选择一个 自我调整计时器 (它本质上是一个基于超时的计时器,它会不断调整自身以适应它所创建的延迟)