javascript setInterval

Ome*_*ega 16 javascript

一个问题.如果我以这种方式使用setInterval:

setInterval('doSome();',60000);
Run Code Online (Sandbox Code Playgroud)

我是否安全doSome(),即使我在浏览器中更改了标签,该功能每60秒触发一次?

Del*_*ani 29

传递字符串setInterval很好,是两种使用方法之一setInterval,另一种是传递函数指针.它在任何方面都没有错,就像其他答案状态一样,但它没有那么高效(因为代码必须被重新解析),也不是为了你的目的.都

setInterval('doSome();', 60000); // this runs doSome from the global scope
                                 // in the global scope
Run Code Online (Sandbox Code Playgroud)

setInterval(doSome, 60000);      // this runs doSome from the local scope
                                 // in the global scope
Run Code Online (Sandbox Code Playgroud)

是正确的,尽管它们的含义略有不同.如果doSome某个非全局范围是本地的,则在同一范围内调用后者将以doSome60000ms的间隔运行本地.调用前一个代码将始终doSome在全局范围内查找,如果doSome全局范围内没有函数,则将失败.

无论标签焦点如何,都会以至少 60000ms的间隔可靠地触发该功能,但由于开销和延迟,通常会略微更多.

所有浏览器都会将间隔值钳制到至少一定的值,以避免间隔太频繁(我认为它至少是10毫秒或4毫秒或其他东西,我不能完全记住).

请注意,某些浏览器(即将推出的Firefox 5是一个,但可能还有其他我不知道的)setInterval如果选项卡没有聚焦,则会进一步大幅缩放到1000毫秒.(参考)


Ric*_*d H 1

如果具有该setInterval()功能的选项卡保持打开状态,那么该功能将每 60 秒执行一次,即使您切换到或打开其他选项卡也是如此。