それは確かにあなたが発見した非常に奇妙な問題です。グローバルスコープで暗黙的に新しい関数を作成した場合、結果はおそらく期待どおりです。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からそれを呼び出すと、IE8thisは何らかの形で特別なものになっているようです。windowのプロパティを比較するとthis、肯定的な比較になります。thisIE8がオブジェクトのある種のラッパーとして扱われるように見え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
良いニュースは、上記と以下の両方のコードスニペットがすべてtrueChrome、Firefox、IE9/10などで返されることです...