Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript';函数返回的setInterval块?_Javascript_Jquery_Html_Browser - Fatal编程技术网

Javascript';函数返回的setInterval块?

Javascript';函数返回的setInterval块?,javascript,jquery,html,browser,Javascript,Jquery,Html,Browser,我有一个javascript函数函数a(),我希望每10秒执行一次。 我发现我可以使用setInterval,这样我就可以做类似的事情:setinvval(a,10000) 我的问题如下: 这是否意味着 i) 每10秒调用一次指定的函数(无论前一次执行是否以多线程方式运行)或 ii)调用该函数,当该函数完成执行后,计划在10秒后调用该函数? 我基本上对方案2感兴趣。如果选项1是默认情况下发生的情况,那么我如何实现选项2?基本上,setInterval根据选项1运行,但如果函数占用的时间超过间隔时

我有一个javascript函数
函数a()
,我希望每10秒执行一次。
我发现我可以使用
setInterval
,这样我就可以做类似的事情:
setinvval(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
删除超时


请注意,即使您使用
setInterval
,由于JavaScript的单线程性质,函数也永远不会同时运行。

setInterval(a,10000)
计划每10秒调用一次函数,而不管它以前的调用完成所用的时间。如果您想在最后一次调用完成后的10秒钟内安排下一次调用,则应在函数返回之前在函数本身中调用
setTimeout(a,10000)
,基本上,我不想使用
setInterval

1),而是想确保我的函数没有实例同时运行,而是所有函数调用都是串行的。2) 这个递归超时是如何工作的?@lanzz说的是oposite吗?@Jim:不是,lanzz没有说相反的话。如果该函数需要0.5秒且间隔为1秒,则仍将每秒调用该函数。如果使用
setTimeout
方法,则每隔1.5秒调用一次。顺便说一句,JavaScript不是多线程的,除非您使用在单独上下文中运行的web workers(不适用于您的情况)。那么递归超时代码段基本上是如何工作的呢?好的,我明白您的意思。但在我看来,这会由于太多的递归而导致堆栈溢出。除非我以某种方式加入到这个逻辑中,否则这是一种停止递归的方法。基本上,我感兴趣的是确保我的函数没有任何实例同时运行,但所有函数调用都是串行的。我不清楚从你的答案看它们是否是串行的