我有一个javascript函数function a()
,我想每10秒执行一次。
我发现我可以使用setInterval
,这样我可以这样做:setInverval(a, 10000);
我的问题是:
这是否意味着
我)每10秒指定的函数被调用(不管前面执行正在运行/多线程方式)或
ii)该函数被调用,并且当此函数已完成执行那么函数的下一次调用将在10秒后计划?
我基本上对选项2感兴趣。如果选项1是默认情况下发生的情况,那么我如何实现选项2?Javascript的setInterval块的函数返回?
2
A
回答
4
基本上,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
来取消超时。
请注意,即使您使用setInterval
,由于JavaScript的单线程性质,函数将会同时运行从不。
2
setInterval(a, 10000)
调度一个函数,每10秒调用一次,而不管它以前调用完成的时间。如果您想在完成最后一次通话后安排下一次通话时间为10秒,则应在a
功能本身内呼叫setTimeout(a, 10000)
,然后再返回,而不是使用setInterval
。
+0
基本上我有兴趣确保没有实例我的函数是同时运行的,但所有的函数调用都是串行的。我不清楚它们是否从你的答案中串行 – Jim
相关问题
- 1. JavaScript。 setInterval的空函数返回2
- 2. Javascript setInterval函数
- 3. 运行JavaScript函数的setInterval
- 4. JavaScript的setInterval函数问题
- 5. 从setInterval函数获取返回值
- 6. 函数返回返回函数的函数javascript
- 7. 定义函数之前的JavaScript setInterval回调函数?
- 8. javascript setInterval()滑块
- 9. javascript函数返回函数
- 10. JavaScript函数的返回值
- 11. 从函数返回的JavaScript:
- 12. 返回“undefined”的JavaScript函数
- 13. boolean返回的Javascript函数
- 14. Javascript函数返回
- 15. Javascript函数返回
- 16. 返回函数Javascript
- 17. 在JavaScript中返回函数的函数
- 18. 函数返回一个函数(JavaScript)的
- 19. 从JavaScript中的函数返回函数
- 20. JavaScript的子函数通过返回父函数返回
- 21. 的setInterval/setTimeout的返回值
- 22. 从Javascript中的回调函数返回
- 23. Javascript中的回调函数返回
- 24. JavaScript中的setInterval()函数的用法
- 25. 的setInterval JavaScript的 - 如何调用函数
- 26. Javascript setInterval函数不停止
- 27. '多线程'setInterval函数(Javascript)
- 28. javascript函数返回数据
- 29. JavaScript函数返回数组
- 30. Excel中的模块函数返回#VALUE
1)基本上我有兴趣确保我的函数没有实例同时运行,但所有函数调用都是串行的。 2)这个递归超时是如何工作的? – Jim
@lanzz是否说相反? – Jim
@Jim:不是,lanzz不是说相反的事情。如果函数需要0.5秒并且间隔为1秒,则该函数仍将每秒调用一次。如果使用'setTimeout'方法,它将每隔1.5秒调用一次。顺便说一句,JavaScript不是多线程的,除非您使用在单独的上下文中运行的web worker(不适用于您的情况)。 –