2016-02-13 32 views
0

说我有这样的:引用成员是否阻止父对象上的GC?

function getMember() { 

    var myRoot = { 
     a: {val: 1}, 
     b: {val: 2} 
    }; 

    return myRoot.a; 
} 

var myMember = getMember(); 

如何JavaScript的处理myRoot对象时,它超出范围后?即使存在对myRoot.a的实时参考,它是否会(及其“剩余”成员myRoot.b)被垃圾收集?

回答

0

引用成员是否阻止父对象上的GC?

除非该构件具有圆形参考回父对象,或包含/是封闭在它当然的功能,但在这里,这不是这种情况。

V8在超出范围后如何处理myRoot对象?

它会像每隔一个对象一样对待。 myRoot变量将超出范围,并且该对象将不再被任何引用,因此它有资格进行垃圾回收。

它甚至可能已经存储在堆栈上,这意味着当函数返回时,它的内存立即被重新声明。

即使存在对myRoot.a的实时引用,它(和其“剩余”成员myRoot.b)是否会被垃圾收集?

是的。该参考不是针对“myRoot.a”,而是针对堆上的对象{val: 1}。它没有附加名称。

相关问题