You need to enable JavaScript to run this app. 全局声明的const为何无法通过globalThis/window访问?存储位置是什么?
优惠活动
大模型
产品
解决方案
定价
更多

全局声明的const为何无法通过globalThis/window访问?存储位置是什么?

全局const/let声明的访问与存储机制

1. 是否可以通过globalThis/window访问全局声明的const常量?

没有标准方法可以直接做到。
ES6规范对全局声明做了明确拆分:

  • ES5中就存在的var全局声明、全局函数声明、隐式全局赋值(无关键字直接赋值),都会被挂载为globalThis的可枚举属性,所以可以通过属性访问的方式拿到。
  • ES6新增的const、let、class的全局声明,属于全局词法声明,不会被挂载到globalThis上,自然也没法通过globalThis.xxx的方式访问,除非你手动显式挂载:globalThis.ccc = ccc。

2. 这类全局const常量的实际存储位置是什么?

这类全局词法声明的变量/常量,存储在JS引擎维护的全局词法环境的环境记录项中,这是引擎内部的作用域管理结构,不会暴露给开发者做直接的属性式访问,你只能在全局作用域范围内通过变量名直接引用对应值。

你给出的测试代码输出完全符合上述规范要求:

aaa = "aaa"; // 隐式挂载为globalThis.aaa
var bbb = "bbb"; // var全局声明自动挂载为globalThis.bbb
const ccc = "ccc"; // 存储在全局词法环境,和globalThis无关
console.log(globalThis.aaa, globalThis.bbb, globalThis.ccc); // 输出 aaa bbb undefined

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 09:27:04