在JavaScript中,执行上下文和变量对象实际上是一样的吗?

在JavaScript中,执行上下文和变量对象实际上是一样的吗?,javascript,executioncontext,Javascript,Executioncontext,标题说明了一切 我对JavaScript中执行上下文的整个概念感到非常困惑。 我知道每个执行上下文都与一个变量对象关联,变量对象存储声明的变量、函数和形式参数 “执行上下文”这个词对我来说太抽象了。如果变量对象存储所有内容,那么这个单词执行上下文是用来做什么的?这只是同一事物的两个词吗?不,它们是不同的事物 所有血淋淋的细节都在中的规范及其链接的章节中,但从根本上说,执行上下文有一个可变绑定对象,但它还有其他东西,比如对其包含上下文的引用,它为我们提供了范围链以及上下文中的值。我明白了,这很有帮

标题说明了一切

我对JavaScript中执行上下文的整个概念感到非常困惑。 我知道每个执行上下文都与一个变量对象关联,变量对象存储声明的变量、函数和形式参数


“执行上下文”这个词对我来说太抽象了。如果变量对象存储所有内容,那么这个单词执行上下文是用来做什么的?这只是同一事物的两个词吗?

不,它们是不同的事物


所有血淋淋的细节都在中的规范及其链接的章节中,但从根本上说,执行上下文有一个可变绑定对象,但它还有其他东西,比如对其包含上下文的引用,它为我们提供了范围链以及上下文中的值。

我明白了,这很有帮助。谢谢在Web浏览器中,window对象是全局上下文的变量绑定对象,所有变量、函数等都存储在window对象中。这就是这个问题产生的原因。我说得对吗?@beli:全局对象是全局上下文的变量绑定对象,是的,10.4.1.1-在浏览器上,而不是在浏览器上。在浏览器上,window是一个预定义的全局变量,即全局对象上的一个属性,该属性引用全局对象。非浏览器环境通常没有等效对象,但您可以创建一个,因为它在全局范围内也是对全局对象的引用。因此,this.global=this;在全局范围内创建一个等价的全局,称为全局。执行上下文的所有三个组件都存储为对象类型吗?我们可以称它们为object吗?例如variable object、lexical environment object、thisbinding object?@beli:它们是规范中的概念性对象,FWIW称它们为object对我来说似乎完全合理,我不认为任何人会对你这样做感到惊讶。这就是我说JS一直以来都是面向对象的原因之一。当然,它们在实现中可能是文字对象,但我们无法知道,因为我们无法直接访问它们。它们可能不是{}或新对象的结果,因为它们可能没有Object.prototype作为原型。谢谢,t.J。这很有帮助。