console.log会阻止垃圾回收吗?

Ben*_*Ben 18 javascript

如果我有一个通常会被垃圾收集但已被记录到控制台的对象,它是否仍有资格进行垃圾回收?

(function(){
  var o = { foo: {} }; 
  console.log(o);
}())

// Can o be collected?
Run Code Online (Sandbox Code Playgroud)

如果是,是否有任何情况下写入控制台(使用其任何方法)会影响垃圾收集的资格?

编辑:我不相信它会影响基于在Chrome开发工具中观看堆的收集资格.但是,任何类型的写入控制台都会这样做吗?

小智 6

如果将对象记录到控制台,则无法对其进行垃圾收集。

\n\n

您可以通过在 chrome 控制台中输入来验证这一点:

\n\n
var Foo = function() {};\nconsole.log(new Foo());\n
Run 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。

\n