JavaScript中的激活对象是什么?


13

在给定的执行上下文中,Variable对象是该执行上下文的Activation对象。

通过在线研究,我可以找到以不同方式改写的前一句话,但没人能说出它是什么。

什么是激活对象?


一个激活对象处于最上面的对象范围链与最下面的是全局对象。有关更多详细信息,请参见此答案
ikaruss 2014年

Answers:


17

让我从根开始...

执行上下文是包含以下内容的对象:

  • 变量对象,在功能情况下为激活对象
  • 作用域链,您可以将其视为外部作用域的链表
  • this

变量对象是一种抽象的事物,可以是以下任意一种:

  • 全局对象(在全球范围内) -的地方全局变量(如windowdocumentconsole在浏览器中)驻留
  • 激活对象(用于在ECMAScript中定义范围的函数)

激活对象是持有以下内容的对象:

  • 函数的形式参数
  • arguments 此功能的对象
  • 此函数内的所有var和(命名)函数

因此,激活对象只是可变对象的一种特殊情况。

它基本上是一个容器,用于存储您可以在函数中通过名称访问的所有本地内容(除外)this我在这里可能不准确,但这就是我的想法。

带有一些精美图片的更多说明:


2

激活对象是用于保存描述执行功能的环境和范围的属性的对象。在此对象上存储例如函数参数。根据定义,激活某事物是使该事物起作用或起作用。因此,当您听到“激活对象”时,请考虑“功能”对象,或者更好的是,对于函数而言是本地的根对象(即,功能本地对象)。

关于变量对象,激活对象或多或少是变量对象的具体实例,变量对象本身(这里是指变量对象)是ABSTRACT对象类型。如前所述这里 ...

术语“变量对象”是一个通用或抽象术语,用于指代具有描述当前执行上下文的环境和范围的属性的任何对象。

因此,在全局执行上下文的环境和范围内(即,在函数外部时),全局对象是变量对象。在浏览器中,由于全局或最外部执行环境是浏览器WINDOW,因此window最终该对象被用作Variable对象。这就是为什么用var关键字在函数外部声明的变量最终出现在window对象上的原因。

但是,在函数范围内,激活对象(即函数本地对象)是变量对象,因为该对象用于存储描述执行函数范围的属性。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.