Javascript getter和setter——为什么它能工作

Javascript getters and setters - why does it work?

本文关键字:工作 为什么 Javascript setter getter      更新时间:2023-09-26

我遇到了以下代码。它有效,但我不知道为什么。

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关键字在堆上分配的变量吗?只要我的代码在某个地方引用了它,它就不会停止存在?

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

  1. savedData与函数定义在同一级别,因此它们可以从closure内部使用它。

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

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

点击此处阅读更多:

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

javascript 中的值类型引用类型对象