窗口卸载前clearInterval的原因?

Ale*_*ara 12 javascript browser compatibility setinterval

我注意到一对夫妇的JavaScript库,利用的setInterval,该库将事件侦听器绑定到windowunload事件,以清除使用所有创建的间隔clearInterval.

一个例子是History.js,它保持"设置间隔列表,在卸载文档时清除".

片段:

// ====================================================================
// Interval record

/**
 * History.intervalList
 * List of intervals set, to be cleared when document is unloaded.
 */
History.intervalList = [];

/**
 * History.clearAllIntervals
 * Clears all setInterval instances.
 */
History.clearAllIntervals = function(){
    var i, il = History.intervalList;
    if (typeof il !== "undefined" && il !== null) {
        for (i = 0; i < il.length; i++) {
            clearInterval(il[i]);
        }
        History.intervalList = null;
    }
};
Run Code Online (Sandbox Code Playgroud)

此处unload添加事件上调用此函数的事件侦听器.

片段:

/**
 * Clear Intervals on exit to prevent memory leaks
 */
History.Adapter.bind(window,"unload",History.clearAllIntervals);
Run Code Online (Sandbox Code Playgroud)

所以,我的问题是,为什么有些JavaScript作者会这样做呢?当浏览器离开页面时,似乎会自动清除这些间隔(我从未见过它).这样做有好处吗?它会弥补某种浏览器错误吗?如果是这样,它会影响哪些错误和哪些浏览器?

Ale*_*ara 3

正如评论中提到的,此代码已添加到 History.js 中以与 Env.js 兼容

Env.js 是一个用 JavaScript 编写的无头浏览器,现已不再积极开发。因此,至少可以说,这绝对是一种极端情况。我猜测这个问题是由 JavaScript 本身的限制引起的。

用户Lance Leonard在评论中指出IE 10可能存在内存泄漏问题

  • 您看过http://stackoverflow.com/questions/15905652/workaround-for-ie10-setinterval-memory-leak/15919452#15919452吗? (2认同)