首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript setInterval

javascript setInterval
EN

Stack Overflow用户
提问于 2011-04-27 16:55:11
回答 8查看 28.1K关注 0票数 18

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

代码语言:javascript
复制
setInterval('doSome();',60000);

即使我在浏览器中更改选项卡,每隔60秒触发一次doSome()函数是否安全?

EN

回答 8

Stack Overflow用户

发布于 2011-04-27 17:07:12

setInterval 传递字符串是很好的,并且是使用setInterval的两种方式之一,另一种方式是传递函数指针。它不像其他答案状态那样是错误的,但它不是那么有效(因为代码必须重新解析),也不是您的目的所必需的。两者都有

代码语言:javascript
复制
setInterval('doSome();', 60000); // this runs doSome from the global scope
                                 // in the global scope

代码语言:javascript
复制
setInterval(doSome, 60000);      // this runs doSome from the local scope
                                 // in the global scope

是正确的,尽管它们有一个表示的略有不同。如果doSome是某个非全局作用域的本地作用域,则从相同作用域中调用后者将以60000ms的间隔运行本地doSome。调用前面的代码将始终在全局范围内查找doSome,如果在全局范围内没有doSome函数,则会失败。

该功能将以至少 60000ms间隔可靠地触发,而不管选项卡焦点如何,但由于管理费用和延迟,通常会稍微多一点。

所有浏览器都将间隔值限制为至少一个特定值,以避免间隔过于频繁(我认为最小为10ms或4ms,我记不太清了)。

请注意,一些浏览器(即将推出的Firefox5就是其中之一,但可能还有我不知道的其他浏览器)进一步将setInterval大幅限制到例如1000ms,如果标签不是焦点的话。(Reference)

票数 32
EN

Stack Overflow用户

发布于 2011-04-27 17:33:16

不,在清除事件循环之前,间隔无法执行,因此,如果执行setInterval(func, 1000); for(;;),则间隔将永远不会运行。如果其他浏览器选项卡在同一线程中运行(就像它们在任何地方(?)除了chrome之外,如果这些选项卡阻塞了事件循环,则同样适用。)

但是对于像60000这样大的时间间隔,函数很可能会在合理的时间内被调用。但不能保证。

票数 2
EN

Stack Overflow用户

发布于 2011-04-27 16:56:45

如果带有setInterval()函数的选项卡保持打开状态,则该函数将每隔60秒执行一次,即使您切换到或打开其他选项卡也是如此。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5801543

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档