为何Property Getter无法反映Closure变量的更新值?
构造函数闭包与Getter的交互问题
先明确这段代码的实际执行结果:
- 构造函数内的
console.log(closureX)输出1 - 外部的
console.log(o.publicX)输出1
如果你预期o.publicX是0,那是对闭包和getter的工作逻辑理解有误:
- 你定义的
get publicX() { return closureX }是一个闭包函数,它捕获的是构造函数作用域中closureX变量的引用,而非定义时的固定值。 - 构造函数执行流程:
- 声明
let closureX = 0 - 通过
Object.assign把getter挂载到实例对象this上 - 执行
closureX++,将变量值从0修改为1
- 声明
- 当你访问
o.publicX时,会触发getter函数,它会读取closureX变量的当前值——也就是1,而非定义getter时的0。
如果你的运行结果和上述不符,大概率是代码书写错误(比如误将getter写成普通属性赋值:publicX: closureX,这种情况才会固定为0),或者运行环境不支持ES6的let和getter语法。
内容的提问来源于stack exchange,提问作者kofifus
相关产品推荐
相关产品推荐

