闭包返回函数不会更改范围变量

时间:2017-11-11 14:02:46

标签: javascript closures

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

为什么最后一行返回9而不是11,因为x在同一范围内?

1 个答案:

答案 0 :(得分:1)

y:x表示“将x的当前值复制到属性y”。

当时的值为9

x值的后续更改不会更改y的值。

您可以更改getX函数以修改this.y,也可以将y属性更改为getter函数,该函数读取x的当前值。