再次 setTimeout 与 setInterval

2023-12-13

所以我知道之间存在差异setTimeout and setInterval,但请考虑这两个代码示例:

function myFunction(){
   setTimeout('myFunction();', 100);
   doSomething();
}
setTimeout('myFunction();', 100);

and

function myFunction(){
   doSomething();
}
setInterval('myFunction();', 100);

请注意,在第一个示例中我调用setTimeout在函数的开头,然后我doSomething。因此,没有额外的延迟doSomething()。这是否意味着这两个示例的作用完全相同?还是还有更细微的差别?


它们在功能上大致相同,但也存在差异。一个区别在于浏览器如何处理它doSomething需要比间隔时间更长的时间。和setInterval,至少有些浏览器只会skip下一个间隔如果doSomething仍在运行。因此,如果您使用 100ms,并且doSomething需要 110 毫秒才能运行,下一次运行要等到 90 毫秒后才会发生(当然,所有这些时间都是近似值)。

另一个区别是,与setTimeout,你每次都会得到一个新的句柄,而setInterval你得到一个手柄。

与给出的示例的另一个区别是,在setTimeout例如,您正在启动 JavaScript 解析器/编译器每次,而与setInterval你只启动解析器/编译器一次。但这种差异并不重要,因为您根本不应该这样做 - 见下文。

但抛开细微差别不谈,你所拥有的功能在功能上是相同的。


边注:将字符串传递给两者都不是最佳实践setTimeout or setInterval。相反,传入一个函数引用:

// setTimeout
function myFunction(){
   setTimeout(myFunction, 100);
   doSomething();
}
setTimeout(myFunction, 100);

// setInterval
function myFunction(){
   doSomething();
}
setInterval(myFunction, 100);

传入一个字符串会启动 JavaScript 解析器并执行与以下相同的操作eval。应尽可能避免(而且几乎总是可能的)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

再次 setTimeout 与 setInterval 的相关文章