我遇到了一些我正在运行的JavaScript的问题,并将其分解为以下代码。我对为什么_localVar调用后为什么init()变量不更改感到困惑。我发现,如果我在RevealingModule中引用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 *

最佳答案

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

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

10-04 20:23