You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何Property Getter无法反映Closure变量的更新值?

构造函数闭包与Getter的交互问题

先明确这段代码的实际执行结果:

  • 构造函数内的console.log(closureX)输出1
  • 外部的console.log(o.publicX)输出1

如果你预期o.publicX是0,那是对闭包和getter的工作逻辑理解有误:

  • 你定义的get publicX() { return closureX }是一个闭包函数,它捕获的是构造函数作用域中closureX变量的引用,而非定义时的固定值。
  • 构造函数执行流程:
    1. 声明let closureX = 0
    2. 通过Object.assign把getter挂载到实例对象this上
    3. 执行closureX++,将变量值从0修改为1
  • 当你访问o.publicX时,会触发getter函数,它会读取closureX变量的当前值——也就是1,而非定义getter时的0。

如果你的运行结果和上述不符,大概率是代码书写错误(比如误将getter写成普通属性赋值:publicX: closureX,这种情况才会固定为0),或者运行环境不支持ES6的let和getter语法。

内容的提问来源于stack exchange,提问作者kofifus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 08:57:35