这确实是一个非常奇怪的问题,你发现了。如果你隐式地在全局范围内创建了一个新函数,那么结果可能就是你所期望的。我已经修改了的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/
似乎是IE8莫名其妙地使this
以某种方式特殊,当你明确地分配给window
一个函数,然后调用它。比较this
的window
属性导致积极的比较。它看起来好像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
好消息是,以上的和下面的代码片段都在浏览器,Firefox,IE9/10,等返回true
...
在IE8(在IE9仿真),我得到真实的真假。在IE9中,他们都像Chrome一样给出“真实”。我想这是一个错误。 – pimvdb
in ** real ** IE8(不在IE9中模拟)这是false false false false true – slobo