我有以下结论:
var Container = (function () {
var variable;
var changeVariable = function () {
variable = 5;
};
return {
variable: variable,
changeVariable: changeVariable
};
})();
Container.changeVariable();
console.log(Container.variable);结果未定义,除非我将变量设置为:
Container.variable = 5
为什么是这样?有什么关系呢?我该怎么做才好呢?
发布于 2016-09-23 10:55:34
为什么是这样?
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重命名为遵循该约定)。
发布于 2016-09-23 10:54:37
使用吸气器:
return {
get variable() { return variable; },
changeVariable: changeVariable
};https://stackoverflow.com/questions/39658970
复制相似问题