這確實是一個非常奇怪的問題,你發現了。如果你隱式地在全局範圍內創建了一個新函數,那麼結果可能就是你所期望的。我已經修改了的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