术语“激活对象”仅仅是“变量对象”的另一个名称,或者它们之间实际上有什么区别吗?我一直在阅读一些关于如何在执行上下文中形成变量作用域的JavaScript文章,从我的角度来看,似乎在大多数文章中,这两个术语可以互换使用。
发布于 2011-06-14 00:06:05
嗯,我刚刚学到了一些东西:)。从this article可以看出,在函数的执行上下文中,Activation对象被用作变量对象:
当创建执行上下文时,会按照定义的顺序发生许多事情。首先,在函数的执行上下文中,创建一个"Activation“对象。..。
然后,使用ECMA 262称为“变量”对象的对象来进行“变量实例化”的过程。但是,Activation对象被用作变量对象(请注意,这一点很重要:它们是同一个对象)。Variable对象的命名属性是为函数的每个形式参数创建的,如果函数调用的参数与这些参数相对应,则这些参数的值将被分配给属性(否则,分配的值是未定义的)。
但是,当您在全局作用域中时,没有Activation对象,因此全局对象被用作变量对象:
全局执行上下文得到了一些稍微不同的处理,因为它没有参数,所以它不需要定义的激活对象来引用它们。..。全局对象用作变量对象,这就是全局声明的函数成为全局对象属性的原因。
因此,听起来“激活对象”和“变量对象”在函数上下文中是相同的,但在全局上下文中不是。
发布于 2014-01-24 04:49:32
全局激活对象是作用域链中最上面的对象,最下面的是全局对象。而全局变量对象是一个抽象的概念,因此,根据其执行上下文,它是作用域链中的任何环节,包括激活/全局对象。
它包含:
将您在名为body;
它不包含:
this
(因为它不是variable);更多信息- JavaScript. The core.
在tl;dr的情况下少用引号
variable object是与执行上下文相关的数据范围。它是一个与上下文相关的特殊对象,用于存储在上下文中定义的变量和函数声明。
variable object是一个抽象概念。在不同的上下文类型中,物理上,它使用不同的对象来表示。
。。在全局上下文中,变量object本身就是全局对象。函数的variable object也是简单的variable object,但除了变量和函数声明外,它还存储形参和arguments
对象,被称为激活对象。
。。当在代码中访问this
时,它的值直接从执行上下文中获取,而不需要任何范围链查找。
发布于 2015-08-08 17:04:57
更准确地说,Activation对象是一种变量对象。这类似于一个人是人类的一种。正如here所说,术语“可变对象”只是一个泛化的术语,用于描述任何持有描述当前执行上下文的环境和范围的属性的对象。
因此,在全局执行上下文中(即,在任何函数之外),它最终成为全局对象。为什么?因为它是保存描述全局执行上下文的环境和范围的属性的对象。
而在函数本地执行上下文中(即在函数内),函数本地对象(也称为激活对象)是变量对象,因为它持有描述当前执行函数的环境和作用域的属性。属性,例如函数参数。
https://stackoverflow.com/questions/6337344
复制