それは確かにあなたが発見した非常に奇妙な問題です。グローバルスコープで暗黙的に新しい関数を作成した場合、結果はおそらく期待どおりです。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
、肯定的な比較になります。this
IE8がオブジェクトのある種のラッパーとして扱われるように見え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などで返されることです...