Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/410.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript获取者和设置者-为什么它能工作?_Javascript_Angularjs - Fatal编程技术网

Javascript获取者和设置者-为什么它能工作?

Javascript获取者和设置者-为什么它能工作?,javascript,angularjs,Javascript,Angularjs,我遇到了以下代码。这是可行的,但我不知道为什么 app.factory('myService', function() { var savedData = {} function set(data) { savedData = data; } function get() { return savedData; } return { set: set, get: get } }); 该函数返回一个由两个函数组成的对象,set()和get()。但是它本身并不返

我遇到了以下代码。这是可行的,但我不知道为什么

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才能理解它。 但我可以简单地向你解释:

  • savedData
    与函数定义在同一级别,因此它们可以在
    闭包中使用它

  • 函数作为
    引用传递
    ,因此复制指向函数的指针并指向此函数,即使是从另一个字段

  • return
    语句相同:它可以使用
    get
    set
    函数,因为它们在它的可视范围内

  • 请在此处阅读更多信息:


    因为工厂返回一个对象,而您在
    return{set:set,get:get}末尾返回了该对象
    我知道它返回该对象。但是我的问题是-为什么savedData变量在用户代码中是“可见的”?请阅读关于@user107986的内容,也请阅读Javascript的工作原理。它保证局部变量保持可访问性。只有当垃圾收集器检测到不可能引用它们时,它们才会被释放。