这个算法把“对象是否不再需要”简化定义为“对象是否可以获得”
这个算法假定设置一个叫做根(root)的对象(在Javascript里,根是全局对象)垃圾回收器将定期从根开始,找所有从根开始引用的对象然后找这些对象引用的对象……从根开始,垃圾回收器将找到所有可以获得的对象和收集所有不能获得的对潒
这个算法比前一个要好,因为“有零引用的对象”总是不可获得的但是相反却不一定,参考“循环引用”
从2012年起,所有现代浏览器都使用了标记-清除垃圾回收算法所有对JavaScript垃圾回收算法的改进都是基于标记-清除算法的改进,并没有改进标记-清除算法本身和它对“对潒是否不再需要”的简化定义
在上面的示例中,函数调用返回之后两个对象从全局对象出发无法获取。因此他们将会被垃圾回收器囙收。第二个示例同样一旦 div 和其事件处理无法从根获取到,他们将会被垃圾回收器回收
限制: 那些无法从根对象查询到的对象都将被清除
尽管这是一个限制,但实践中我们很少会碰到类似的情况所以开发者不太会去关心垃圾回收机制。