2014-01-16 149 views
0

我有函数返回一个对象:当一个函数创建并返回对象时会发生什么?

function makeObject() { 
    return { 
    property: "value" 
    }; 
} 

我提出可以将新对象从这样的:

var newObject = makeObject(); 

我对此有些疑问:

  1. 是否newObject引用该函数返回的原始对象,还是一个完全新鲜的具有自己属性的新对象?

  2. 如果它是一个全新的对象,那么它在某种意义上就是函数返回的对象的深拷贝

  3. 函数原始对象发生了什么?如果无法引用它,它是否在JavaScript运行时保持活动状态?

+1

阅读关于JavaScript中的“闭包”... – elclanrs

回答

3
  1. 是(一个新的对象被创建每次运行功能,但参考到新对象由函数返回)。你只能存储对JS变量中对象的引用。
  2. 它不是。
  3. 函数内部对它的引用消失。由于您将其分配给变量,因此您返回的引用仍然可用。由于仍然有可访问的参考,它仍然存在。

关于garbage collection的MDN文档是有用的相关阅读。

1

下面是一个等效功能:

function makeObj() { 
    var o = new Object(); 
    o.property = 'value'; 
    return o; 
} 

对象常量语法是,有效地,对于上述的简写。

所以是的,这是一个全新的对象,不,它不是一个深层的副本,因为没有什么可以复制。每次调用函数时都会制造一个新对象。

相关问题