我遇到了一些我正在运行的javascript问题并将其分解为下面的代码。我很困惑为什么_localVar
变量在调用init()
后没有变化。我发现如果我在揭示模块中引用this._localVar
,结果就像预期的那样。我对范围感到困惑。有人可以澄清为什么会这样。我想如果我没有使用this
,那么下一个范围将是模块,但我不认为这种情况正在发生。
var myRevealingModule = (function () {
var _localVar = "Default";
function init() {
console.log(_localVar);
_localVar = "Init";
}
function getTest() {
console.log(_localVar);
}
return {
init: init,
getTest: getTest,
localVar: _localVar
};
})();
myRevealingModule.getTest(); // "Default"
console.log(myRevealingModule.localVar); // "Default"
myRevealingModule.init(); // "Default"
myRevealingModule.getTest(); // "Init"
console.log(myRevealingModule.localVar); // "Default" * WHY *
答案 0 :(得分:1)
myRevealingModule.localVar
不是对变量值的引用;它只是在创建字符串时复制它。
当您使用this.localVar
时,您正在使用返回对象中的变量。因此,当您更改该标识符时,它也会更新为myRevealingModule.localVar
。
答案 1 :(得分:1)
请注意,您的模块使用自调用功能。因此,myRevealingModule.localVar
的值在myRevealingModule
的定义和内置调用之后立即确定。此时_localVar
的值为"默认",将其复制到返回的对象的localVar
属性。即使您之后更改_localVar
,这对myRevealingModule.localVar
也不会有任何影响。
基本上,以下示例显示了相同的效果:
var a = 42;
var b = a;
console.log(a); // 42
console.log(b); // 42
a = 84;
console.log(a); // 84
console.log(b); // 42
b
复制a
的值。如果您之后更改a
,则对b
无影响。