JavaScript中引用Global对象
2015-09-22
在 JavaScript 中,所有不属于任何其它对象的属性或方法,都是Global
对象的属性或方法。也就是说,没有真正意义上的全局变量或函数,所有在全局作用域中定义的变量或函数都是Global
对象的属性或方法。这也是为什么在全局作用域中,不使用var
关键字声明的变量能通过delete
操作符删除,而使用var
关键字声明的变量则不可以。因为对Global
对象来说,前者是属性,而后者则不是。
Global
对象的另一个特点是无法直接引用。尽管所有浏览器都将Global
对象作为window
对象的一部分加以实现,但window
对象本身还具有许多浏览器对象模型独有的属性和方法。《JavaScript 高级程序设计》第三版中通过如下方式取得对Global
对象的引用:
// Page 134
var global = (function() {
return this
})()
但在严格模式下,this
值等于undefined
。那么如何确保始终正确引用Global
对象?
;(function() {
console.dir(this) // window
})()
;(function() {
'use strict'
console.dir(this) // undefined
})()
;(function(global) {
console.dir(global) // window
})(this)
;(function(global) {
'use strict'
console.dir(global) // window
})(this)
显然,不管是在支持严格模式的浏览器下,还是在不支持严格模式的浏览器下,始终将this
值作为参数传递给立即执行函数能够确保正确引用global
对象。
var global = (function(global) {
'use strict'
return global
})(this)