JavaScript 闭包是如何被垃圾回收的
我记录了以下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