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的工作原理。它保证局部变量保持可访问性。只有当垃圾收集器检测到不可能引用它们时,它们才会被释放。