我注意到在几个使用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作者会这样做呢?当浏览器离开页面时,似乎会自动清除这些间隔(我从未见过它)。这样做有好处吗?它会弥补某种浏览器错误吗?如果是这样,它会影响哪些错误和哪些浏览器?
答案 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。