浏览器中的窗口对象是闭包还是其他构造?

tim*_*one 2 javascript

我不是一个全职的JS开发人员,虽然我觉得我已经永远使用它了.大多数闭包的讨论都是有道理的.我很好奇全局window对象是否只是全局关闭?我已经阅读了http://lostechies.com/derickbailey/2011/11/30/is-javascripts-global-scope-really-just-a-closure/,但它似乎没有回答是的问题 - 或者-没门.

bfa*_*tto 5

它是一个对象,因此它不能是一个闭包(闭包是函数,还有一个作用域链).它也是全局范围对象,因为所有全局变量都是window1的属性.

你提到的文章说:

看起来全局范围只不过是JavaScript内置于其中的闭包支持的双向产品,结合运行时的最外层范围(DOMWindow或CommonJS实现的一些其他范围).

作者并不是说这window是一个闭包,它只是说所有东西都可以访问全局范围,因为在内部范围中可以看到陷入闭包的变量.那是真实的.


1window正如Rocket Hazmat所指出的,它包括对象本身的引用.而且有不止一个,有window,self,top...所以window.window.top.window.self === window.事实上,window全局可访问的原因是因为在全局对象(=== itself)中有对它的引用.另请参阅:我对为什么在JavaScript中创建顶级函数作为窗口方法的答案?,以及它下面的评论.