8

当我们在 Javascript 中定义一个顶级命名函数时,它就变成了窗口对象的一个​​方法。这个设计决定的原因是什么?

4

2 回答 2

4

Javascript 总是在特定的全局上下文中运行。在作为窗口对象的浏览器环境中,因此当您定义一个全局对象时,实际上是将其添加到窗口...

这是另一个很好的stackoverflow答案,解释了为什么会这样: 窗口在Javascript中真的是全局的吗?

于 2013-05-27T18:56:13.387 回答
3

这个设计决定的原因是什么?

我无法回答这个问题,我们必须询问设计语言的人,以及维护其规范的委员会。但也许这会给你一些见解:在内部,变量(局部或全局)总是存储在“词法环境”对象中。因此,它们始终是属性,甚至还有自己的属性(将它们标记为只读、不可删除等)。

除了全局对象外,环境对象不会在浏览器 JavaScript 中公开(正如评论中的 squint 所指出的,ECMAScript 实际上并不要求公开全局变量对象,这取决于实现。)

碰巧决定全局对象与浏览器中的窗口对象相同。为什么?再说一次,我无法回答。他们只是决定不使用专用global(或其他)标识符。

于 2013-05-27T19:29:49.083 回答