现代ECMAScript中Lexical Environments与Environment Records的区别
词法环境(LE)与环境记录(ER)的概念差异说明
1. 现代ES6+版本中词法环境概念仍然存在
你看到的ES12规范仅在环境记录的单独章节未提及LE,是内容划分的问题,并非LE被移除。从ES6到最新的ECMAScript版本,每个执行上下文依然保留LexicalEnvironment和VariableEnvironment两个核心属性,用来关联当前上下文对应的作用域结构,这个设计和ES5.1的规则完全一致。
2. LE与ER的核心区别
两者是包含关系,从ES5.1到最新规范的定位从来没有变过:
- 词法环境(LE)是完整的作用域结构单元,它由两部分组成:
- 环境记录(ER):是LE内部的存储容器,负责存储当前作用域内所有变量、函数、类等标识符和对应值的绑定关系
- 外部词法环境引用:指向父级作用域的LE,作用域链就是通过这个引用串联起来的,也是闭包能访问外部作用域变量的底层实现基础
你看到的新版ER章节描述和旧版LE表述相似,是因为旧版介绍LE的时候会连带讲解其内部ER的存储逻辑,而新版规范把ER单独抽成了独立章节,细化了不同场景下ER的分类(比如全局环境记录、函数环境记录、模块环境记录等),单独介绍ER的存储能力时,看起来就和旧版里LE的部分描述重合,并不是两者概念合并了。
内容的提问来源于stack exchange,提问作者knotri
相关产品推荐
相关产品推荐

