从对象中删除对象?

时间:2014-12-14 01:48:50

标签: javascript object

考虑到这样的事情:

function test(){
   var o = {
      // ...
      del: function(){}
   }
   return o;
}

是否可以.del()删除/设置为对变量o的引用为空以使其符合垃圾回收的条件?

换句话说,这是可能的(如果是这样的话):

var test1 = test();
// test1 = {...}
test1.del();
// test1 == null or test1 == undefined;

我确实尝试设置o = null,但外部引用(test1仍会引用该对象)。我也明白设置test1 = null会解决问题,但那里的乐趣在哪里?

2 个答案:

答案 0 :(得分:0)

根据我在评论中看到的内容,这种模式无法满足您的需求。每次调用测试函数或“新建”测试函数时,都会返回一个对象的新实例。由函数的调用者来清理它的新“o”实例。在这种思路上,您不必将值显式设置为null或undefined以使其符合垃圾回收的条件。一旦没有对象的引用,它将被清理干净。

以下是来自MDN的一个很好的例子 -

function f(){
  var o = {};
  var o2 = {};
  o.a = o2; // o references o2
  o2.a = o; // o2 references o

  return "azerty";
}

f();

函数返回后,f()的内部范围将被清除,因为里面的变量不再“可达”。 It's called the Mark and Sweep algorithm.

答案 1 :(得分:0)

不可能有一个方法del()让对象被垃圾收集。要使垃圾收集器启动,该对象必须无法访问,就像您在帖子中test1 = null;

一样

垃圾收集的目的是让你不必担心管理你的记忆。