在Javascript中创建并存储在函数中的对象会发生什么?

时间:2015-06-30 15:28:49

标签: javascript garbage-collection

鉴于

function Foo(){
   this.name = "foo"
}

Foo.prototype.hello = function(){
   alert("Hello");
}

function bar(){
  var foo = new Foo();
  foo.hello();
}

变量foo会发生什么?会收集垃圾吗?

1 个答案:

答案 0 :(得分:1)

根据MDN,许多类型的算法用于垃圾收集。在上述情况下,foo的范围仅在bar内。因此,只要函数bar返回,它就会被垃圾收集。

引用计数垃圾回收

  

这是最天真的垃圾收集算法。这个算法   将“不再需要一个物体”的定义减少到“一个   对象没有引用它的其他对象“。考虑一个对象   如果没有引用指向此处的垃圾可收集   对象

标记和扫描算法

  

该算法减少了“不需要对象”的定义   再“到”一个物体无法到达“。

     

该算法假定知道一组称为根的对象   (在JavaScript中,根是全局对象)。定期,   垃圾收集器将从这些根开始,找到所有对象   从这些根引用,然后从中引用所有对象   从根部开始,垃圾收集器就这样了   找到所有可到达的对象并收集所有不可到达的对象。

foo满足两种垃圾收集算法