我有以下代码:
if(output[0].ListOfSockets.length == 0)
{
var index = Rooms.indexOf(output[0]);
if (index > -1)
{
console.log('Deleted room when there is no one else more');
Rooms.splice(index, 1);
}
}
这就是我创建一个新房间的方式,现在当每个人都离开时我想要删除这个房间。
是否足够删除对阵列室功能的引用?或者我必须用特殊命令删除它吗?
这就是我现在删除它的方式:
<a href="javascript:history.go(-1)">Go back</a>
这里我删除了对函数实例的引用,而不是函数本身。
如果我正确阅读this并理解它,当我删除对该函数的引用时,垃圾收集会删除该函数吗?
答案 0 :(得分:4)
无法删除对象。如果没有人持有对它的引用,我们只能等待它被垃圾收集。
我们可以删除的是对象上的属性,例如foo.bar
。这对于foo.bar
曾经提到的任何内容都没有任何影响。它只是从bar
中删除foo
属性。但是,如果foo.bar
是最后指的是它所做的事情,那么那件事现在可以成为GC&#39; d。
删除此房间实例
如上所述,您无法删除对象,包括Room
的实例。你可以做的是从你保留的引用它的列表中删除它,和/或从属性可能引用它的对象中删除它。同样,如果那些是唯一剩下的参考文献,那么房间将是GC&#39; d。
是否足够删除对阵列室功能的引用?或者我必须用特殊命令删除它吗?
同样,您无法删除引用&#34; - 您只能删除对象上的属性,无论是数组还是对象。我也不确定你的意思是&#34;阵列室的功能&#34;。我想你的意思是&#34;删除对数组Rooms中元素的引用,这是由函数(构造函数)Room
创建的实例。&#34;是的,这已经够了。除了&#34;删除&#34;没有其他特殊的方式。它即使你想要。
当然,对象的引用也可以保存在变量中。当然,您无法删除变量。你可以做的是将变量设置为其他东西(通常为null
),如果该变量是引用先前保持的对象的最后一个,那么它现在可以是GC&#39; d。但是,说你是&#34;删除&#34;是不正确的。变量或对变量中保存的对象的引用。您只是放弃或孤立该对象,这使其符合GC的条件。如果你真的想使用术语&#34;删除&#34;,你可以说它是垃圾收集器正在删除它,尽管使用单词&#34;释放它&#34;是正常的。