3 回答

TA贡献1797条经验 获得超6个赞
有什么区别吗?
是。调用setTimeout()后,超时执行一定的时间; 间隔在上一个间隔触发后执行一定的时间。
如果doStuff()函数需要一段时间才能执行,您会注意到区别。例如,如果我们使用setTimeout / setInterval表示调用,.使用*和执行JavaScript代码触发超时/间隔[-----],则时间轴如下所示:
Timeout:
. * . * . * . * .
[--] [--] [--] [--]
Interval:
. * * * * * *
[--] [--] [--] [--] [--] [--]
下一个复杂情况是,如果在JavaScript已经忙于执行某些操作(例如处理上一个间隔)时会触发间隔。在这种情况下,会记住间隔,并在上一个处理程序完成后立即发生并将控制权返回给浏览器。因此,例如doStuff()过程有时很短([ - ]),有时很长([-----]):
. * * • * • * *
[-] [-----][-][-----][-][-] [-]
•表示无法立即执行其代码的间隔触发,而是取而代之。
因此,间隔试图“赶上”以按时恢复。但是,它们并不排在一起:每个区间只能有一个执行挂起。(如果他们都排队等候,浏览器会留下不断扩展的未完成执行列表!)
. * • • x • • x
[------][------][------][------]
x表示无法执行或被挂起的间隔触发,因此被丢弃。
如果你的doStuff()函数通常需要比为它设置的时间间隔更长的时间来执行,那么浏览器会吃100%的CPU来尝试为它提供服务,并且可能会降低响应速度。
你用哪个?为什么?
Chained-Timeout为浏览器提供了保证的空闲时间; Interval尝试确保其运行的功能尽可能接近其预定时间执行,但代价是浏览器UI可用性。
我会考虑一次性动画的间隔,我希望尽可能平滑,而链式超时对正在进行的动画更有礼貌,这些动画会在页面加载时一直发生。对于要求较低的用途(例如每30秒触发一次微不足道的更新程序),您可以安全地使用它们。
在浏览器兼容性方面,setTimeout优先于setInterval,但您今天将遇到的所有浏览器都支持这两种浏览器。多年来最后一个落后者是WinMo <6.5的IE Mobile,但希望现在也落后于我们。

TA贡献1831条经验 获得超4个赞
的setInterval()
setInterval()
是一种基于时间间隔的代码执行方法,具有在达到间隔时重复运行指定脚本的本机能力。它应该不被嵌套到它的回调函数由脚本作者,使其循环,因为它循环默认。除非你打电话,它将继续按间隔开火clearInterval()
。
如果要循环动画代码或时钟滴答,请使用setInterval()
。
function doStuff() { alert("run your code here when time interval is reached");}var myTimer = setInterval(doStuff, 5000);
的setTimeout()
setTimeout()
是,将执行一个脚本仅基于时间的代码执行方法一次到达的时间间隔时。它不会再次重复,除非你通过将setTimeout()
对象嵌套在它调用运行的函数内来使其循环脚本。如果适合循环,除非你打电话,它将继续按间隔射击clearTimeout()
。
function doStuff() { alert("run your code here when time interval is reached");}var myTimer = setTimeout(doStuff, 5000);
如果您希望在指定的时间段后发生一次某些事情,请使用setTimeout()
。这是因为它只在达到指定的间隔时执行一次。
添加回答
举报