在函数中创建和 return 一个对象是否安全?

Is it safe create and return an object created in a function?

我有以下代码:

function createPersone(gender){
 let localPerson = new Object();
 localPerson.gender = gender;
 return localPerson;
}

let globalPerson = createPerson("female");

在函数中创建对象的引用,localPerson包含创建的对象在内存中的地址。当返回 localPerson 时,这个地址被复制到 globalPerson 中。但是localPerson有scope函数应该销毁,但是内容是一个地址,地址指向的那个(即对象)是否也被删除了?对象的删除应该从垃圾收集中得到控制。在这种情况下,我可以假设指令 let globalPerson = createPerson("female"); 是安全的吗?为什么?幕后发生了什么?

只要您有办法访问某些值,该值就不会被垃圾回收。也就是说,对于 JavaScript 的任何正确实现的垃圾收集器,只要您可以访问它,您就永远不会找到被垃圾收集器销毁的值。

由于createPerson没有创建和返回函数,调用createPerson创建的闭包确实会被垃圾回收,所以闭包本地变量 localPerson 将被销毁。但是,该变量引用的值不会被销毁,因为它仍然可以通过 globalPerson 变量访问。