我记录了以下Chrome 错误,这导致我的代码中有许多严重且不明显的内存泄漏:
(这些结果使用 Chrome Dev Tools 的内存分析器,它运行 GC,然后对所有没有被垃圾收集的东西进行堆快照。)
在下面的代码中,someClass
实例被垃圾收集(好):
var someClass = function() {};
function f() {
var some = new someClass();
return function() {};
}
window.f_ = f();
但在这种情况下不会被垃圾收集(坏):
var someClass = function() {};
function f() {
var some = new someClass();
function unreachable() { some; }
return function() {};
}
window.f_ = f();
以及相应的截图:
如果对象被同一上下文中的任何其他闭包引用,则闭包(在本例中为 )似乎function() {}
使所有对象保持“活动”,无论该闭包本身是否可访问。
我的问题是关于其他浏览器(IE 9+ 和 Firefox)中闭包的垃圾收集。我对 webkit 的工具非常熟悉,比如 JavaScript 堆分析器,但是我对其他浏览器的工具知之甚少,所以我无法对此进行测试。
在这三种情况下,IE9+ 和 Firefox 会垃圾收集 someClass
实例中的哪一种?