2017-11-11 23 views
0
function testLet(){ 
    var x=9; 
    return{ 
     y:x, 
     getX: function(){ 
      return ++x; 
     }, 
    } 
} 

var obj = new testLet(); 
console.log(obj.y); //9 as expected 
console.log(obj.getX()); //10 as expected 
console.log(obj.getX()); //11 as expected 
console.log(obj.y); //I expect it 11.. but it stays 9 

xが同じスコープにあるので、最後の行が11ではなく9を返すのはなぜですか?クロージャー戻り関数はスコープ付き変数を変更しません

答えて

1

y:xは、「の現在の値をyにコピーする」を意味します。

この時点での値は9です。

xの値を変更しても、yの値は変更されません。あなたはthis.yを変更するために、あなたのgetX機能を変更するか、またはあなたがxの現在の値を読み込み、getter関数であることをyプロパティを変更することができます


+0

ありがとうございました。xを返す関数としてyの2番目のオプションを試してみましたが、両方の関数が同じxを共有しています。関数としてのyがx valriableを変更した場合、getterXは更新された値も持ちます。したがって、returnメソッドのDiffernt関数が変数を共有すると仮定するのは安全ですが、代入が変数の場合は別のコピーになりますか? – helloworld