ES+新特性 | 青训营笔记

82 阅读2分钟

在执行学习JavaScript 代码执行过程中,我们学习了很多 ECMA 文档的术语:

  • 执行上下文栈:Execution Context Stack ,用于执行上下文的栈结构
  • 执行上下文:Execution Context ,代码在执行之前会先创建对应的执行上下文
  • 变量对象: Variable Object ,上下文关联的 VO 对象,用于记录函数和变量声明;
  • 全局对象:Global Object ,全局执行上下文关联的 VO 对象;
  • 激活对象:Activation Object ,函数执行上下文关联的 VO 对象;
  • 作用域链:scope chain ,作用域链,用于关联指向上下文的变量查找

在新的ECMA代码执行描述中(ES5以及之上),对于代码的执行流程描述改成了另外的一些词汇:

  • 基本思路是相同的,只是对于一些词汇的描述发生了改变;

新的js执行原理图 image.png

词法环境(Lexical Environments)

词法环境是一种规范类型,用于在词法嵌套结构中定义关联的变量、函数等标识符;

  • 一个词法环境是由环境记录(Environment Record)和一个外部词法环境(oute;r Lexical Environment)组成;
  • 一个词法环境经常用于关联一个函数声明、代码块语句、try-catch语句,当它们的代码被执行时,词法环境被创建出来;

执行一个代码,通常会关联对应的词法环境;执行上下文会关联LexicalEnvironment和VariableEnvironment

  • LexicalEnvironment用于处理let、const声明的标识符:
  • VariableEnvironment用于处理var和function声明的标识符:

环境记录(Environment Record)

在这个规范中有两种主要的环境记录值:声明式环境记录和对象环境记录。

  • 声明式环境记录:声明性环境记录用于定义ECMAScript语言语法元素的效果,如函数声明、变量声明和直接将标识符绑定与ECMAScript语言值关联起来的Catch子句。
  • 对象式环境记录:对象环境记录用于定义ECMAScript元素的效果,例如WithStatement,它将标识符绑定与某些对象的属性关联起来。