一个问题。如果我以这种方式使用setInterval:
setInterval('doSome();',60000);即使我在浏览器中更改选项卡,每隔60秒触发一次doSome()函数是否安全?
发布于 2011-04-27 17:07:12
向 setInterval 传递字符串是很好的,并且是使用setInterval的两种方式之一,另一种方式是传递函数指针。它不像其他答案状态那样是错误的,但它不是那么有效(因为代码必须重新解析),也不是您的目的所必需的。两者都有
setInterval('doSome();', 60000); // this runs doSome from the global scope
// in the global scope和
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)
发布于 2011-04-27 17:33:16
不,在清除事件循环之前,间隔无法执行,因此,如果执行setInterval(func, 1000); for(;;),则间隔将永远不会运行。如果其他浏览器选项卡在同一线程中运行(就像它们在任何地方(?)除了chrome之外,如果这些选项卡阻塞了事件循环,则同样适用。)
但是对于像60000这样大的时间间隔,函数很可能会在合理的时间内被调用。但不能保证。
发布于 2011-04-27 16:56:45
如果带有setInterval()函数的选项卡保持打开状态,则该函数将每隔60秒执行一次,即使您切换到或打开其他选项卡也是如此。
https://stackoverflow.com/questions/5801543
复制相似问题