在函数中创建和 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
变量访问。
我有以下代码:
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
变量访问。