我有一个function a()
想每10秒执行一次的javascript函数。
我发现我可以使用setInterval
来做类似的事情:setInverval(a, 10000);
我的问题是以下几点:
这是否意味着
i)每10秒调用一次指定的函数(无论先前的执行是在运行还是以多线程方式运行)或
ii)该函数已被调用,并且该函数完成执行后,该函数的下一次调用被安排在10秒后?
我基本上对选项2感兴趣。如果默认情况下发生了选项1,那么如何实现选项2?
基本上,setInterval
根据选项1运行,除了如果该函数花费的时间超过间隔时间,它将在函数完成并到达下一个刻度之前不会再次被触发。例如,如果您的间隔为1秒,而您的函数需要1.5秒,则它将在2秒的刻度上运行。
如果您想要选项2的行为(在函数完成后X秒钟运行),请setTimeout
在函数完成时调用:
setTimeout(function a() {
// your own code
setTimeout(a, 1000);
}, 1000);
它的工作方式是先等待1秒,然后调用传递给的函数setTimeout
。在函数的末尾,将函数本身(a
即函数的名称)传递给setTimeout
,然后等待一秒钟再次调用该函数。这将一直持续到JavaScript执行停止或使用删除超时为止clearTimeout
。
请注意,由于JavaScript的单线程性质,即使使用setInterval
,该函数也永远不会同时运行。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句