1

実行していた 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 *
4

2 に答える 2

1

モジュールが自己呼び出し関数を使用していることに注意してください。したがって、 の値はmyRevealingModule.localVar、 の定義および組み込み呼び出しの直後に決定されますmyRevealingModule。このときの値は「デフォルト」であり、返されたオブジェクトのプロパティ_localVarにコピーされます。後でlocalVar変更しても、これはもう影響しません。_localVarmyRevealingModule.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の値をコピーしますaa後で変更しても、に影響はありませんb

于 2014-04-02T14:21:55.273 に答える