代码之家  ›  专栏  ›  技术社区  ›  Willem van der Veen

javascript,ES5+还有激活对象吗?

  •  2
  • Willem van der Veen  · 技术社区  · 6 年前

    正在读取有关JavaScript执行上下文的一些信息。我在看下面的 article 拉佩什·米什拉。

    本文指出,每次新的函数调用都会创建一个新的执行上下文。执行上下文确实有两个阶段:创建阶段和执行阶段,其中代码逐行执行。

    有人说,在创建阶段,JS引擎可以做3件事:

    1. 确定的值 this
    2. 创建范围链
    3. 创建激活或变量对象

    这是激活对象的解释:

    创建激活对象或变量对象: 激活对象是JS中的一个特殊对象,它包含所有变量、函数参数和内部函数声明信息。因为激活对象是一个特殊的对象,所以它没有dunder proto属性。

    问题:

    ES5 +还有这个激活对象结构吗?如果不是,执行上下文的创建阶段的当前步骤是什么?

    1 回复  |  直到 6 年前
        1
  •  5
  •   Bergi    6 年前

    不,ES5(及更高版本)不再使用标准JS对象来存储变量。它使用 lexical environments (带 this 价值和范围链)包含 environment records 存储变量值的各种类型。

    执行上下文的创建阶段的当前步骤是什么?

    Section 10.4 Establishing an Execution Context 说说看。

    这种行为与ES3没有太大的区别(在所有旧代码仍然有效之后),它只是用新术语来描述。