Javascript getter和setter - 为什么它有效?

时间:2015-10-28 18:03:16

标签: javascript angularjs

我遇到过以下代码。它有效,但我不确定原因。

app.factory('myService', function() {
 var savedData = {}
 function set(data) {
   savedData = data;
 }
 function get() {
  return savedData;
 }

 return {
  set: set,
  get: get
 }

});

该函数返回一个由两个函数set()get()组成的对象。但它本身并没有返回功能,为什么它甚至可以工作呢?变量savedData不应该超出范围吗?或者我应该将savedData视为在Java上使用new关键字在堆上分配的变量?只要我的代码在某个地方引用它,它就不会停止存在?

1 个答案:

答案 0 :(得分:0)

您需要深入了解JavaScript才能理解它。 但我可以简要解释一下:

  1. savedData定义在与功能相同的级别,以便他们可以在closure内部使用它。

  2. 函数作为reference传递,因此指向函数的指针被复制并指向此函数,甚至从另一个字段指向。

  3. return语句相同:它可以使用getset函数,因为它们位于可见范围内。

  4. 在这里阅读更多内容:

    https://developer.mozilla.org/en/docs/Web/JavaScript/Closures

    value type reference type object in javascript