我遇到过以下代码。它有效,但我不确定原因。
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
关键字在堆上分配的变量?只要我的代码在某个地方引用它,它就不会停止存在?
答案 0 :(得分:0)
您需要深入了解JavaScript才能理解它。 但我可以简要解释一下:
savedData
定义在与功能相同的级别,以便他们可以在closure
内部使用它。
函数作为reference
传递,因此指向函数的指针被复制并指向此函数,甚至从另一个字段指向。
与return
语句相同:它可以使用get
和set
函数,因为它们位于可见范围内。
在这里阅读更多内容:
https://developer.mozilla.org/en/docs/Web/JavaScript/Closures