2011-12-27 12 views
11

誰か説明できますか? IE8IE8 `window.fn!== fn`

によりIEのバグに
(function(){ 
    window.foo = function foo(){}; 
    console.log(window.foo === foo); // false 
}()); 
+0

非常に良い読み取り:http://kangax.github.com/nfe/ – InfinitiesLoop

答えて

13

は、名前の関数式は、関数の別のコピーを別のローカルfoo変数を作成します。

More info

var f = function g(){}; 
f === g; // false 

物事が面白くなっている場所です。またはむしろ完全にナット。ここでは、2つの異なるオブジェクトに対処しなければならないという危険性があります。そのうちの1つを増強すると、明らかに他のオブジェクトは変更されません。たとえば、メカニズムをキャッシングしてfのプロパティに何かを格納し、それをgのプロパティとしてアクセスしようとしたときに、それがあなたと同じオブジェクトであると考えると、これはかなり面倒かもしれません。

+0

素晴らしい、ありがとう。私はこれまでにそれを読んだことがありますが、今までそれまでに打撃を受けたことはありません。 –

+2

もう一度、javascriptが混乱しています。 –

1

問題を修正することに興味がある場合は、これが機能します。あなたがそこに持っているものである「という名前の関数式」、上の

(function(){ 
    var f = function foo(){}; 
    window.foo = f; 
    alert(window.foo === f); // false 
}()); 
+4

または単に名前を取り除く – SLaks