【问题标题】:What happens when objects are created and returned by a function?当对象由函数创建和返回时会发生什么?
【发布时间】:2014-01-16 17:07:05
【问题描述】:

我有一个返回对象的函数:

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

我可以像这样从中制作新对象:

var newObject = makeObject();

我对此有一些疑问:

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

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

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

【问题讨论】:

  • 阅读 JavaScript 中的“闭包”...

标签: javascript function object closures deep-copy


【解决方案1】:
  1. 是的(每次运行函数都会创建一个新对象,但函数会返回一个对该新对象的引用)。您只能在 JS 变量中存储对对象的引用。
  2. 不是。
  3. 函数内部对它的引用消失了。您返回的对它的引用仍然可用,因为您将它分配给了一个变量。由于仍然存在对它的可访问引用,因此它继续存在。

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

【讨论】:

    【解决方案2】:

    这是一个等效函数:

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

    对象字面量语法实际上是上述内容的简写。

    所以是的,它是一个全新的对象,不,它不是深拷贝,因为没有什么可复制的。每次调用该函数时,它都会生成一个新对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-29
      • 1970-01-01
      • 2013-10-13
      • 2016-12-31
      • 2019-10-02
      • 1970-01-01
      • 2017-10-06
      相关资源
      最近更新 更多