JavaScript标准把一段代码(包括函数),执行所需的所有信息定义为:“执行上下文”。

    执行上下文在ES3中**,包含三个部分。

    • scope:作用域,也常常被叫做作用域链。
    • variable object:变量对象,用于存储变量的对象。
    • this value:this值。

    在ES5中,我们改进了命名方式,把执行上下文最初的三个部分改为下面这个样子。

    • lexical environment:词法环境,当获取变量时使用。
    • variable environment:变量环境,当声明变量时使用。
    • this value:this值。

    在ES2018中,执行上下文又变成了这个样子,this值被归入lexical environment,但是增加了不少内容。

    • lexical environment:词法环境,当获取变量或者this值时使用。
    • variable environment:变量环境,当声明变量时使用
    • code evaluation state:用于恢复代码执行位置。
    • Function:执行的任务是函数时使用,表示正在被执行的函数。
    • ScriptOrModule:执行的任务是脚本或者模块时使用,表示正在被执行的代码。
    • Realm:使用的基础库和内置对象实例。
    • Generator:仅生成器上下文有这个属性,表示当前生成器。