全局变量真正存储在哪里?我知道这个question存在,但我正在读一本书,说明全局变量存储为全局执行上下文对象的属性。
但我在第一段中包含的链接表明它们是Window对象的属性。那么Window和Global Execution Context对象之间的关系是什么?如果没有,这本书我读错了吗?
答案 0 :(得分:2)
全局变量真正存储在哪里?
全局变量在全局执行上下文中成为lexical environment的属性,与函数变量相同,成为函数词法环境的属性。
为方便起见,它们也是全局对象的属性。
我目前正在阅读一本书,其中说全局变量存储为全局执行上下文对象的属性。
或多或少。 ES5的术语发生了变化,之前有一个变量对象的概念,用于在变量上下文中存储变量,但它只是一个规范设备,而不是一个可以访问的实际对象。
ES5引用词汇环境,其中包含变量环境,请参阅EMCA-262 §10.3
但我在第一段中包含的链接表明它们是Window对象的属性。
在浏览器中, window 对象实际上是全局对象的别名。 window 是一个宿主对象,因此它可以拥有比内置全局对象更多的属性和方法。
那么Window和Global Execution Context对象之间的关系是什么?
我认为上面已经解释过了。简而言之,在浏览器中,全局窗口对象和窗口对象实际上(但不完全相同)是相同的。
如果没有,这本书我读错了吗?
不,但似乎让你感到困惑。 ; - )
另请参阅:MDN: Window.window