【发布时间】:2014-01-17 09:17:15
【问题描述】:
假设我通过以下方式创建了一个计时器:
setTimeout()
(或者我正在使用setInterval())
虽然该计时器正在计时,但在它到期之前,我决定关闭正在执行该代码的浏览器选项卡。浏览器是否会在那时自动清理计时器(考虑到我没有调用 clearTimeout ())?
我想知道代码是否有可能在内存中停留足够长的时间,以至于当达到超时值时,它仍然可以执行代码。或者关闭选项卡是否意味着计时器从内存中删除,因此在setTimeout()中调用的函数将永远不会被执行。
【问题讨论】:
-
我建议它会因浏览器而异,但例如对于 Chrome,选项卡本身就是一个过程;关闭时,它会从内存中删除。至于其他浏览器,我看不到将其保存在内存中的好处,但我不能肯定地说。
-
在与其关联的浏览器窗口关闭后不会执行超时:“清理”(如在 GC'ed 中?)似乎不是一个实际问题,它本身就是一个实现细节。
-
@richieahb 是的,我想这对于不同的浏览器可能会有所不同。尽管您对 Chrome 的评价是有道理的。 user2864740 为此干杯。你碰巧有一个链接到我可以参考的地方吗?我需要将有关此问题的详细信息传递给一些同事。
-
@JasonEvans 不是直接的,尽管我认为 [documented] 答案直接位于
window上下文/生命周期的范围内。
标签: javascript memory timer dispose