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

为什么全局上下文下执行console.log(this.a)时let声明的a返回undefined

问题现象原因

核心原因是var和let的全局声明绑定规则存在本质差异:

  • 使用var在全局上下文声明变量时,会同时将变量作为属性挂载到全局对象(浏览器环境为window,Node.js环境为globalThis)上。而全局上下文里的this默认指向全局对象,因此this.b可以直接访问到挂载的属性值6。
  • ES6 新增的let/const/class等声明方式,在全局上下文声明的变量只会存储在全局作用域的声明环境记录中,不会被挂载到全局对象上。因此全局对象上不存在a属性,通过this.a访问自然返回undefined。

补充验证:直接在全局上下文执行console.log(a)可以正常输出5,说明变量a确实存在于全局作用域中,只是没有绑定到全局对象上而已。这个设计是ES6特意做的区分,目的是避免全局变量意外覆盖全局对象的原生属性,减少全局命名冲突的风险。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 18:54:02