考虑到这样的事情:
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
会解决问题,但那里的乐趣在哪里?
答案 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;
垃圾收集的目的是让你不必担心管理你的记忆。