2

我知道 js 具有垃圾回收功能,可以释放不再引用的内存,但我很好奇 GC 是否适用于像这样引用它们的对象:

var x = {
  b:function(){
    alert('hello');
  },
  y:function(){ //init listeners
    $(some-dom-el).click(function(){
       x.b();
    });
  },
  z:function(){
    var ex = this.r(55,9000);
  },
  r:function(a,b){
    return a + b;
  }
}

$(function(){
   x.y();
});

那么使用deleteonvar x成功删除对象(当然是在手动删除事件侦听器之后)?

4

1 回答 1

1

GC 确实知道如何处理循环引用。(旧的 IE 除外)。

但是,如果您在活动 DOM 元素中的事件处理程序中有引用,则您的对象将不会被 GC,因为该引用将永远存在。(或直到您删除处理程序或元素)

于 2013-01-14T18:14:44.400 回答