删除函数的引用,删除函数的实例?

时间:2016-12-14 12:38:08

标签: javascript

我有以下代码:

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并理解它,当我删除对该函数的引用时,垃圾收集会删除该函数吗?

1 个答案:

答案 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;是正常的。