我有以下关闭:
var Container = (function () {
var variable;
var changeVariable = function () {
variable = 5;
};
return {
variable: variable,
changeVariable: changeVariable
};
})();
Container.changeVariable();
console.log(Container.variable);
结果是未定义的,除非我将变量设置为:
Container.variable = 5
为什么会这样?有什么不同?我该怎么做呢?
答案 0 :(得分:2)
使用getter:
return {
get variable() { return variable; },
changeVariable: changeVariable
};
答案 1 :(得分:2)
为什么会这样?
JavaScript按值分配。
variable = 5;
将值5
分配给变量variable
。
variable: variable,
将variable
(代码运行时 >>)的值分配给属性variable
。它不会创建对名为variable
的变量的引用。
如果稍后更改名为variable
的变量的值,则不会更改名为variable
的属性的值。
我该如何正确地做到这一点?
创建一个对象。在本地存储对象。操纵该对象。归还那个对象。
忘记完全使用名为variable
的变量。
var container = (function() {
var self = {
variable: undefined,
changeVariable: changeVariable
};
function changeVariable() {
self.variable = 5;
}
return self;
})();
container.changeVariable();
console.log(container.variable);
(旁白:公约保留以构造函数的大写字母开头的标识符。我已重命名Container
以遵循该约定。)