定义
执行上下文时是代码执行时的环境,JS代码在运行前进行编译,那么会生成两部分,一部分是可执行的代码,而另一部分则是执行上下文。
发展
执行上下文所包含的内容是在不断的变化的。它主要分为了三个不同的阶段。分别是ES3阶段,ES5阶段和ES9阶段
ES3阶段
- variable object:变量对象,用于存储变量的对象。
- scope:作用域,也常常被叫做作用域链。
- this
ES5阶段
- variable environment:变量环境, 当声明变量时使用。(此环境还包含了一个外部引用,用来指向外部的执行上下文,我们把这个外部引用称为 outer(外部环境))
- lexical environment:词法环境, 当获取变量时使用。
- this
ES9阶段
正常情况
正常情况会有如下四种
- variable environment:变量环境,当声明变量时使用。
- lexical environment:词法环境,当获取变量或者 this 值时使用。
- code evaluation state:用于恢复代码执行位置。
- Realm:使用的基础库和内置对象实例。
⚠️:this 值被归入 lexical environment
特定情况
在特定的情况下又会有如下三种
- Function:执行的任务是函数时使用,表示正在被执行的函数。
- ScriptOrModule:执行的任务是脚本或者模块时使用,表示正在被执行的代码。
- Generator:仅生成器上下文有这个属性,表示当前生成器
参考
TC39规范:https://tc39.es/ecma262/#sec-type
浏览器原理与实践
重学前端