JavaScript中的setInterval()行为,0毫秒

时间:2011-10-04 13:21:01

标签: javascript setinterval

在我的应用程序中,我发现了一些使用setInterval的JavaScript代码,时间为0毫秒,如下所示:

self.setInterval("myFunction()",0);

显然,这对我来说似乎不是一个好主意。谁能告诉我setInterval这里的行为会是什么? (“myFunction”对服务器进行AJAX调用)

我问这个是因为我在我的申请中有不正常的行为。 90%的情况下,应用程序运行正常,并且只对服务器进行一次调用。但有时会对服务器进行多次调用(到目前为止,最多只有48次调用),我几乎可以肯定这是这行代码的错误。

5 个答案:

答案 0 :(得分:18)

浏览器为间隔设置最小值。通常10毫秒,但它可以取决于浏览器。这意味着尽可能快地重复这个。 W3C规范说4ms:http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#timers

这是正确的,但可能会发现设计错误。

编辑:顺便说一句,将字符串传递给setTimeout / setInterval是不好的做法,而是传递函数,因为javascript具有第一类函数。

答案 1 :(得分:1)

setInterval(myFunction, 0)以最小延迟连续拨打myFunction。这几乎就像在无限循环中调用myFunction。除此之外,您可以使用clearInterval方法停止循环。

答案 2 :(得分:0)

要让它仅在延迟时间内执行一次,请改为使用setTimeOut

window.setTimeout(myFunction, 10);

当您使用AJAX时,您根本不必使用任何计时器 - 只需在当前AJAX请求的Callback(完成/成功事件)中调用下一个AJAX请求。

发布您当前的代码,我们或许可以为您提供更多指导。

答案 3 :(得分:0)

我认为在myFunction()中有一个clearInterval

基本上,您已经设置了可以尽可能频繁发生的间隔。如果执行JavaScript的浏览器实际上在间隔的下一次迭代之前到达clearInterval部分,那么它就没问题了。否则,它会一次又一次地发生。

改为使用setTimeout

答案 4 :(得分:0)

setInterval with '0' 在当前线程的末尾移动代码执行。代码放到一边,线程中的其他代码都执行,当没有代码执行时,则执行边代码。