浏览器中的窗口对象是闭包还是其他构造
Is the window object in a browser a closure or some other construct?
我不是一个全职的JS开发人员,尽管我觉得我已经和它一起工作了很久。大多数关于闭包的讨论都是有意义的。我很好奇全局window
对象是否只是一个全局闭包?我读过http://lostechies.com/derickbailey/2011/11/30/is-javascripts-global-scope-really-just-a-closure/但它似乎并没有以肯定或否定的方式回答这个问题。
它是一个对象,所以它不能是闭包(闭包是函数,加上作用域链)。它也是全局范围对象,因为所有全局变量都是window
1的属性。
你提到的文章说:
看起来全局作用域不过是JavaScript内置的闭包支持的双产品,与运行时的最外层作用域(DOMWindow或CommonJS实现的其他作用域)相结合。
作者并不是说window
是一个闭包,只是说所有东西都可以访问全局作用域,原因与闭包中的变量在内部作用域中可见的原因相同。这是真的。
1如Rocket Hazmat所指出的,这包括对window
对象本身的引用。还有不止一个,有window
,self
,top
。。。所以window.window.top.window.self === window
。事实上,window
全局可访问的原因是在全局对象(=== itself
)中有对它的引用。另请参阅:我对为什么顶级函数被创建为JavaScript中的窗口方法的回答,以及下面的注释。
这是一个对象。你可以向它添加属性,也可以从中调用属性。你使用的许多标准函数实际上是window
对象的一部分,但可以省略。如果在脚本中创建一个新窗口,它将有自己的window
对象,您可以引用和操作该对象。
闭包为变量创建一个作用域,就像窗口创建一个范围一样。然而,闭包是一个函数,因此window
对象不是闭包。
- 在underscorejs模板中使用闭包
- setTimeout可以与闭包内的函数一起使用吗
- 附加到原型属性的Do函数没有闭包
- 使用闭包共享构造函数参数
- 使用Google闭包编译器包含一个Ecmascript 6类
- 从js引擎的角度来看闭包和构造函数是如何工作的
- for循环中的JavaScript闭包
- Javascript闭包-如何防止内存泄漏
- 子类访问父类's闭包变量
- 闭包如何具体化数据封装
- Javascript.闭包和dynamic'这'实际上具有约束力
- @internal react 代码中的 JavaScript 文档标签,是 jsdoc、闭包还是其他什么
- 在其他地方定义的 JavaScript 闭包
- 浏览器中的窗口对象是闭包还是其他构造
- Javascript 构造函数,使用引用其他变量的外部变量进行闭包
- JS缩小/闭包编译器将数字从基数10更改为其他数
- 为什么angular要使用闭包来定义指令和其他核心语法?
- JavaScript+css处理-闭包工具/任何其他工具
- JavaScript闭包上下文的其他属性发生了什么
- 闭包编译器:重命名对象键,但仍然可以在其他脚本中使用原始键