【发布时间】:2018-12-20 10:22:19
【问题描述】:
免责声明:这可能是一个愚蠢的问题,但它让我在学习 Javascript 时感到困惑。
我最近遇到了在 Javascript 中使用闭包创建私有变量的范例方法,即使用一个函数返回一个通过其方法引用“私有变量”的对象
var safebox = function() {
var _privateVariable = "abcd";
return {
"accessFunction":function() {
return _privateVariable;
}
}();
safebox.accessFunction(); // "abcd"
也就是说,闭包机制即使在闭包函数返回后,也会维护变量_privateVariable。
如果私有变量是一个在封闭函数返回后保持引用的对象,会发生什么?
var safebox = function () {
var _secretObject = {"secret": "abcd"}
return {referenceToSecretObject: _secretObject};
}();
console.log(safebox); // "abcd"
safebox.referenceToSecretObject.secret = "def";
console.log(safebox); // "def"
在这里,据我了解,“_secretObject”仍然存在,因为我们在“safebox.referenceToSecretObject”中有一个(共享)引用。但这不是关闭(据我了解)。变量是否仍然存在,因为即使在函数返回后仍然存在对它的引用(不是垃圾收集)?我只是感到困惑,因为它的形式似乎接近结束,但也许我只是看到了一些纯粹巧合的相似之处。
【问题讨论】:
-
我认为术语是,它存储在返回函数的
LexicalEnvironment中。 -
对象没有引用变量。它引用了您分配给属性的 值(通过使用变量)。
标签: javascript closures