首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >JavaScript中的激活和变量对象?

JavaScript中的激活和变量对象?
EN

Stack Overflow用户
提问于 2011-06-14 06:54:38
回答 4查看 7.8K关注 0票数 25

术语“激活对象”仅仅是“变量对象”的另一个名称,或者它们之间实际上有什么区别吗?我一直在阅读一些关于如何在执行上下文中形成变量作用域的JavaScript文章,从我的角度来看,似乎在大多数文章中,这两个术语可以互换使用。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-06-14 08:06:05

嗯,我刚刚学到了一些东西:)。从this article可以看出,在函数的执行上下文中,Activation对象被用作变量对象:

当创建执行上下文时,会按照定义的顺序发生许多事情。首先,在函数的执行上下文中,创建一个"Activation“对象。..。

然后,使用ECMA 262称为“变量”对象的对象来进行“变量实例化”的过程。但是,Activation对象被用作变量对象(请注意,这一点很重要:它们是同一个对象)。Variable对象的命名属性是为函数的每个形式参数创建的,如果函数调用的参数与这些参数相对应,则这些参数的值将被分配给属性(否则,分配的值是未定义的)。

但是,当您在全局作用域中时,没有Activation对象,因此全局对象被用作变量对象:

全局执行上下文得到了一些稍微不同的处理,因为它没有参数,所以它不需要定义的激活对象来引用它们。..。全局对象用作变量对象,这就是全局声明的函数成为全局对象属性的原因。

因此,听起来“激活对象”和“变量对象”在函数上下文中是相同的,但在全局上下文中不是。

票数 23
EN

Stack Overflow用户

发布于 2014-01-24 12:49:32

全局激活对象是作用域链中最上面的对象,最下面的是全局对象。而全局变量对象是一个抽象的概念,因此,根据其执行上下文,它是作用域链中的任何环节,包括激活/全局对象

它包含:

将您在名为body;

  • arguments的函数中声明的所有变量和函数作为名为

  • 的对象(如果您希望您的函数支持多个signatures).

它不包含:

  • this (因为它不是variable);
  • named函数expressions.

更多信息- JavaScript. The core.

tl;dr的情况下少用引号

variable object是与执行上下文相关的数据范围。它是一个与上下文相关的特殊对象,用于存储在上下文中定义的变量和函数声明。

variable object是一个抽象概念。在不同的上下文类型中,物理上,它使用不同的对象来表示。

。。在全局上下文中,变量object本身就是全局对象。函数的variable object也是简单的variable object,但除了变量和函数声明外,它还存储形参和arguments对象,被称为激活对象

。。当在代码中访问this时,它的值直接从执行上下文中获取,而不需要任何范围链查找。

票数 11
EN

Stack Overflow用户

发布于 2015-08-09 01:04:57

更准确地说,Activation对象是一种变量对象。这类似于一个人是人类的一种。正如here所说,术语“可变对象”只是一个泛化的术语,用于描述任何持有描述当前执行上下文的环境和范围的属性的对象。

因此,在全局执行上下文中(即,在任何函数之外),它最终成为全局对象。为什么?因为它是保存描述全局执行上下文的环境和范围的属性的对象。

而在函数本地执行上下文中(即在函数内),函数本地对象(也称为激活对象)是变量对象,因为它持有描述当前执行函数的环境和作用域的属性。属性,例如函数参数。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6337344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档