鉴于
function Foo(){
this.name = "foo"
}
Foo.prototype.hello = function(){
alert("Hello");
}
function bar(){
var foo = new Foo();
foo.hello();
}
变量foo会发生什么?会收集垃圾吗?
答案 0 :(得分:1)
根据MDN,许多类型的算法用于垃圾收集。在上述情况下,foo
的范围仅在bar
内。因此,只要函数bar
返回,它就会被垃圾收集。
引用计数垃圾回收
这是最天真的垃圾收集算法。这个算法 将“不再需要一个物体”的定义减少到“一个 对象没有引用它的其他对象“。考虑一个对象 如果没有引用指向此处的垃圾可收集 对象
标记和扫描算法
该算法减少了“不需要对象”的定义 再“到”一个物体无法到达“。
该算法假定知道一组称为根的对象 (在JavaScript中,根是全局对象)。定期, 垃圾收集器将从这些根开始,找到所有对象 从这些根引用,然后从中引用所有对象 从根部开始,垃圾收集器就这样了 找到所有可到达的对象并收集所有不可到达的对象。
foo
满足两种垃圾收集算法