1

我遇到了一些我正在运行的 javascript 的问题,并将其分解为下面的代码。我对为什么调用_localVar后变量没有改变感到困惑。init()我发现如果我this._localVar在revealingModule 中引用,结果符合预期。我对范围感到困惑。有人可以澄清为什么会发生这种情况。我认为如果我不使用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 *
4

2 回答 2

1

myRevealingModule.localVar不是对变量值的引用;它只是在创建字符串时复制了字符串。

使用 时this.localVar,您使用的是返回对象中的变量。因此,当您更改该标识符时,它也会更新为myRevealingModule.localVar.

于 2014-04-02T14:20:58.027 回答
1

请注意,您的模块使用自调用函数。因此, 的值myRevealingModule.localVar是在 的定义和内置调用之后确定的myRevealingModule。此时的值为_localVar“Default”,它被复制到返回对象的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.

于 2014-04-02T14:21:55.273 回答