如果我有一个通常会被垃圾收集但已被记录到控制台的对象,它是否仍有资格进行垃圾回收?
(function(){
var o = { foo: {} };
console.log(o);
}())
// Can o be collected?
Run Code Online (Sandbox Code Playgroud)
如果是,是否有任何情况下写入控制台(使用其任何方法)会影响垃圾收集的资格?
编辑:我不相信它会影响基于在Chrome开发工具中观看堆的收集资格.但是,任何类型的写入控制台都会这样做吗?
小智 6
如果将对象记录到控制台,则无法对其进行垃圾收集。
\n\n您可以通过在 chrome 控制台中输入来验证这一点:
\n\nvar Foo = function() {};\nconsole.log(new Foo());\nRun Code Online (Sandbox Code Playgroud)\n\n转到 \xe2\x80\x9cProfiles\xe2\x80\x9d 和 \xe2\x80\x9c 获取堆快照\xe2\x80\x9d。这将自动进行垃圾收集。搜索类 \xe2\x80\x9cFoo\xe2\x80\x9d。\xe2\x80\x9c 列中将有一个1对象计数\xe2\x80\x9c。