所以我知道之间存在差异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(使用前将#替换为@)