Javascript 闭包返回函数不';t更改作用域变量

Javascript 闭包返回函数不';t更改作用域变量,javascript,closures,Javascript,Closures,为什么最后一行返回9而不是11,因为x在同一范围内 y:x表示“将x的当前值复制到属性y” 此时的值为9 对x值的后续更改不会更改y的值 您可以将getX函数更改为修改this.y,也可以将y属性更改为读取x当前值的getter函数,谢谢。。当我尝试将y的第二个选项作为返回x的函数时,我看到两个函数共享相同的x。如果y作为一个函数对x值进行了任何更改,则getterX也具有更新的值。所以,假设返回方法中的不同函数共享变量是否安全,但当赋值作为变量时,它是一个单独的副本? function te

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

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

此时的值为
9

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



您可以将
getX
函数更改为修改
this.y
,也可以将
y
属性更改为读取
x
当前值的getter函数,谢谢。。当我尝试将y的第二个选项作为返回x的函数时,我看到两个函数共享相同的x。如果y作为一个函数对x值进行了任何更改,则getterX也具有更新的值。所以,假设返回方法中的不同函数共享变量是否安全,但当赋值作为变量时,它是一个单独的副本?
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