我注意到在几个使用的JavaScript库中setInterval
,该库会将事件侦听器绑定到window
的unload
事件,以便使用清除所有创建的间隔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;
}
};
在事件上unload
添加了在事件上调用此函数的事件侦听器。
片段:
/**
* Clear Intervals on exit to prevent memory leaks
*/
History.Adapter.bind(window,"unload",History.clearAllIntervals);
因此,我的问题是,为什么有些JavaScript作者会这样做?似乎这些间隔将在浏览器离开页面时自动清除(我从未见过)。这样做有好处吗?它可以弥补某种浏览器错误吗?如果是这样,它将影响哪些错误和哪些浏览器?
如评论中所述,此代码已添加到History.js中以与Env.js兼容。
Env.js是用JavaScript编写的无头浏览器,现在不再处于活跃开发中。至少可以这样说,这绝对是一个极端情况。我猜这个问题是由JavaScript本身的限制引起的。
用户Lance Leonard在评论中指出IE 10中可能存在内存泄漏问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句