小编典典

设置超时或设置间隔?

all

据我所知,这两段 javascript 的行为方式相同:

选项 A:

function myTimeoutFunction()
{
    doStuff();
    setTimeout(myTimeoutFunction, 1000);
}

myTimeoutFunction();

选项 B:

function myTimeoutFunction()
{
    doStuff();
}

myTimeoutFunction();
setInterval(myTimeoutFunction, 1000);

使用setTimeoutsetInterval有什么区别吗?


阅读 99

收藏
2022-03-02

共1个答案

小编典典

他们基本上尝试做同样的事情,但这种setInterval方法会比这种setTimeout方法更准确,因为setTimeout等待 1000
毫秒,运行函数,然后设置另一个超时。所以等待时间实际上比 1000 毫秒多一点(如果你的函数需要很长时间才能执行,那么等待时间会更长)。

尽管有人可能认为它setInterval会每 1000 毫秒执行一次,但重要的是要注意这也会延迟,因为 JavaScript
不是setInterval一种多线程语言,这意味着 - 如果脚本的其他部分正在运行 - 间隔将有等待完成。

这个
Fiddle
中,您可以清楚地看到超时将落后,而时间间隔几乎一直是
1 次调用/秒(脚本试图这样做)。如果将顶部的速度变量更改为 20 之类的小值(这意味着它将尝试每秒运行 50 次),则间隔永远不会达到平均每秒 50
次迭代。

延迟几乎总是可以忽略不计,但如果你正在编程非常精确的东西,你应该选择一个 自我调整计时器
(它本质上是一个基于超时的计时器,它会不断调整自身以适应它所创建的延迟)

2022-03-02