gpt4 book ai didi

javascript - 是删除对函数的引用,还是删除函数的实例?

转载 作者:行者123 更新时间:2023-11-29 10:07:11 24 4
gpt4 key购买 nike

我有以下代码:

var NewRoom = new Room(OpenRoom[OpenRoom.length - 1].RID)
NewRoom.addPlayer(socket.id);
NewRoom.addSocket(socket);
Rooms.push(NewRoom);

这就是我创建新房间的方式,现在当所有人离开时我想删除这个房间实例。

删除数组 Rooms 函数的引用就够了吗?还是我必须用特殊命令删除它?

这是我现在删除它的方式:

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);
}
}

这里我删除了对函数实例的引用,而不是函数本身。

如果我阅读 this对了,明白了吧,当我删除对函数的引用时,垃圾回收会删除函数吗?

最佳答案

无法删除对象。如果没有人持有对它的引用,我们只能等待它被垃圾收集。

我们可以删除的是一个对象的属性,比如foo.bar。这对 foo.bar 过去引用的内容没有任何影响。它只是从 foo 中删除了 bar 属性。但是,如果 foo.bar 是最后一个引用它所做的事情,那么现在可以对它进行 GC。

delete this instance of room

如上所述,您不能删除对象,包括 Room 的实例。您可以做的是从您保留的引用它的列表中删除它,和/或从其属性可能引用它的对象中删除它。同样,如果这些是唯一剩余的引用,那么房间将被 GC。

Is deleting the reference to the function of array Rooms enough? or must I delete this with a special command?

同样,您不能“删除引用”——您只能删除对象的属性,无论是数组还是对象。我也不确定你所说的“array Rooms 的功能”是什么意思。我猜你的意思是“删除对数组 Rooms 中元素的引用,它是函数(构造函数)Room 创建的实例”。是的,够了。即使您愿意,也没有其他特殊方法可以“删除”它。

当然,对象的引用也可以保存在变量中。当然,您不能删除变量。您可以做的是将变量设置为其他值(通常是 null),如果该变量是引用先前持有的对象的最后一个值,那么它现在可以被 GC 处理。但是,说您正在“删除”变量或对变量中保存的对象的引用是不正确的。您只是放弃或孤立该对象,这使其符合 GC 的条件。如果您真的想使用术语“删除”,您可以说是垃圾收集器正在删除它,尽管使用“释放它”这个词是正常的。

关于javascript - 是删除对函数的引用,还是删除函数的实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41142888/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com