这确实是您发现的一个非常奇怪的问题。如果您在全局范围内隐式创建了一个新函数,那么结果可能是您所期望的。我已经修改了你的 jsFiddle 并在下面显示了它的一部分...... http://jsfiddle.net/VYcmT/
var ff = function() {
var global = this;
console.log(global === window); // true
console.log(global == window); // true
return global;
};
var global = ff();
console.log(global === window); // true
console.log(global == window); // true
奇怪的是,如果您在全局范围 ( window
) 之外显式定义一个函数,如以下代码段所示,那么 IE8 开始感到困惑...... http://jsfiddle.net/zsWUK/
似乎当您显式地将函数分配给window
然后调用它时,IE8 会以某种方式变得this
特别。比较window
属性的this
结果是积极的比较。看起来 IE8 似乎将对象this
视为某种包装器window
。
window.ff = function() {
var global = this;
console.log(global === window); // false
console.log(global == window); // false
console.log(global.window === window); // true
console.log(global.window == window); // true
return global;
};
var global = ff();
console.log(global === window); // false
console.log(global == window); // true
console.log(global === window.window); // true
console.log(global == window.window); // true
好消息是上面和下面的代码片段都true
在 Chrome、Firefox、IE9/10 等中返回......