问题 IE8`window.fn!== fn`


有人可以解释一下吗? IE8

( function(){
    window.foo = function foo(){};
    console.log( window.foo === foo ); // false
}() );

4753
2017-12-27 18:24


起源

非常好读'命名函数表达式',这就是你所拥有的: kangax.github.com/nfe - InfinitiesLoop


答案:


由于IE错误,命名函数表达式创建一个单独的本地 foo 变量与函数的单独副本。

更多信息

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

这是事情变得有趣的地方。或者说 - 完全坚果。在这里,我们看到必须处理两个不同的对象的危险 - 增加其中一个显然不会修改另一个;如果您决定使用缓存机制并将某些内容存储在f的属性中,然后尝试将其作为g的属性进行访问,并认为它与您正在使用的对象相同,那么这可能会非常麻烦。


13
2017-12-27 18:27



太好了,谢谢。我以前读过这个,但直到现在才被它击中过。 - Mark Kahn
再一次,javascript是一团糟。 - BlueRaja - Danny Pflughoeft


如果您有兴趣纠正这个问题,这将有效。

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

1
2017-12-27 18:30



或者只是摆脱这个名字 - SLaks