JavaScript中的激活和可变对象?

| 术语“激活对象”只是“变量对象”的另一个名称,还是它们之间实际上有什么区别?我一直在阅读一些关于如何在执行上下文中形成变量作用域的JavaScript文章,从我的观点看来,在大多数文章中,它们似乎可以互换地使用这两个术语。     
已邀请:
        好吧,我刚刚学到了一些东西:)。从本文看来,在函数的执行上下文中,激活对象将用作变量对象:   创建执行上下文时,会以定义的顺序发生许多事情。首先,在函数的执行上下文中,创建一个“ Activation \”对象。 [...]      然后使用ECMA 262称为“变量”对象的对象进行“变量实例化”过程。但是,激活对象用作变量对象(请注意,这很重要:它们是同一对象)。为每个函数的形式参数创建Variable对象的命名属性,并且如果函数调用的参数与这些参数相对应,则将这些参数的值分配给属性(否则分配的值是未定义的)。 但是,当您处于全局范围内时,没有激活对象,因此将全局对象用作变量对象:   全局执行上下文的处理略有不同,因为它没有参数,因此不需要定义的Activation对象来引用它们。 [...]全局对象用作变量对象,这就是为什么全局声明的函数成为全局对象的属性的原因。 因此,听起来好像\“ Activation Object \”和\“ Variable Object \”在函数上下文中是同一件事,但在全局上下文中却不是。     
        激活对象是作用域链中最上面的对象,最下面的是全局对象。 变量对象是抽象概念,因此,取决于其执行上下文,它是作用域链中的任何链接,包括激活/全局对象。 它包含了: 您在函数体内声明的所有变量和函数; 函数签名指定的参数; 参数作为名为“ 0”的对象(如果您希望函数支持多个签名)。 它不包含:
this
(因为它不是变量); 命名函数表达式。 更多信息-JavaScript。核心。 对于tl; dr,引号很少:   变量对象是与执行上下文有关的数据范围。这是与上下文相关联的特殊对象,用于存储变量和函数声明,它们是在上下文中定义的。      可变对象是一个抽象概念。在不同的上下文类型中,实际上是使用不同的对象呈现的。      [..]在全局上下文中,变量对象是全局对象本身[..]      [..]函数的变量对象是相同的简单变量对象,但是除了变量和函数声明外,它还存储形式参数和“ 0”对象,称为激活对象。      [..]在代码中访问“ 1”时,其值直接从执行上下文中获取,而无需任何范围链查找。     
        更准确地说,一个激活对象是一种变量对象。这类似于男人是一种人类。如此处所述,术语“变量对象”只是一个通用术语,用于描述具有描述当前执行上下文的环境和范围的属性的任何对象。 因此,在全局执行上下文中(即,在任何函数之外),它最终都是全局对象。为什么?因为它是持有描述全局执行上下文的环境和范围的属性的对象。 而在函数本地执行上下文中(即,在函数内部),是函数本地对象(即激活对象)是Variable对象,因为它是持有描述环境和范围的属性的对象当前正在执行的功能。属性,例如函数参数。     
激活的对象仅表示代表事件发生在网页上的元素的对象。因此,如果单击图像,则表示该图像的JavaScript对象就是激活的对象。     

要回复问题请先登录注册