窗口卸载前clearInterval的原因?

时间:2014-12-20 23:48:06

标签: javascript browser compatibility setinterval

我注意到在几个使用setInterval的JavaScript库中,该库会将事件侦听器绑定到window unload事件,以便使用clearInterval清除所有创建的间隔。

一个例子是History.js,它保留"List of intervals set, to be cleared when document is unloaded"

段:

// ====================================================================
// 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;
    }
};

unload事件中调用此函数的事件侦听器已添加here

段:

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

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

1 个答案:

答案 0 :(得分:3)

如评论中所述,this code was added to History.js for compatibility with Env.js

Env.js是一个用JavaScript编写的无头浏览器,不再处于活跃开发阶段。所以这绝对是一个边缘案例,至少可以说。我猜这个问题是由JavaScript本身的限制引起的。

用户Lance Leonard在评论中指出有possible memory leak issue in IE 10