Javascript的setInterval块是否可以返回函数?

时间:2014-02-22 11:13:16

标签: javascript jquery html browser

我有一个javascript函数function a(),我希望每10秒执行一次 我发现我可以使用setInterval,以便我可以执行以下操作:setInverval(a, 10000);
我的问题如下:
这是否意味着 i)每隔10秒调用指定的函数(无论先前的执行是否正在运行/多线程方式)或
ii)调用该函数,当此函数完成执行时,该函数的下一次调用将在10秒后进行调度?
我基本上对选项2感兴趣。如果选项1是默认情况下发生的事情那么我怎样才能实现选项2?

2 个答案:

答案 0 :(得分:5)

基本上,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的单线程特性,该函数也将永远不会同时运行。

答案 1 :(得分:2)

setInterval(a, 10000)计划每10秒调用一个函数,无论其先前的调用完成的时间如何。如果您想在完成最后一次通话后安排下一次通话10秒钟,则应在setTimeout(a, 10000)功能本身内,在其返回之前致电a,而不是使用setInterval