全局变量:全局执行上下文对象或Window对象?

时间:2015-01-19 03:40:20

标签: javascript

全局变量真正存储在哪里?我知道这个question存在,但我正在读一本书,说明全局变量存储为全局执行上下文对象的属性。

但我在第一段中包含的链接表明它们是Window对象的属性。那么Window和Global Execution Context对象之间的关系是什么?如果没有,这本书我读错了吗?

1 个答案:

答案 0 :(得分:2)

  

全局变量真正存储在哪里?

全局变量在全局执行上下文中成为lexical environment的属性,与函数变量相同,成为函数词法环境的属性。

为方便起见,它们也是全局对象的属性。

  

我目前正在阅读一本书,其中说全局变量存储为全局执行上下文对象的属性。

或多或少。 ES5的术语发生了变化,之前有一个变量对象的概念,用于在变量上下文中存储变量,但它只是一个规范设备,而不是一个可以访问的实际对象。

ES5引用词汇环境,其中包含变量环境,请参阅EMCA-262 §10.3

  

但我在第一段中包含的链接表明它们是Window对象的属性。

在浏览器中, window 对象实际上是全局对象的别名。 window 是一个宿主对象,因此它可以拥有比内置全局对象更多的属性和方法。

  

那么Window和Global Execution Context对象之间的关系是什么?

我认为上面已经解释过了。简而言之,在浏览器中,全局窗口对象和窗口对象实际上(但不完全相同)是相同的。

  

如果没有,这本书我读错了吗?

不,但似乎让你感到困惑。 ; - )

另请参阅:MDN: Window.window