有人可以解释一下吗? IE8
( function(){
window.foo = function foo(){};
console.log( window.foo === foo ); // false
}() );
答案 0 :(得分:13)
由于IE错误,命名函数表达式会创建一个单独的本地foo
变量,并带有该函数的单独副本。
var f = function g(){}; f === g; // false
这是事情变得有趣的地方。或者说 - 完全坚果。在这里,我们看到了必须处理两个不同对象的危险 - 增加其中一个显然不会修改另一个;如果您决定使用缓存机制并将某些内容存储在f的属性中,然后尝试将其作为g的属性进行访问,并认为它与您正在使用的对象相同,那么这可能会非常麻烦。
答案 1 :(得分:1)
如果您有兴趣纠正这个问题,这将有效。
( function(){
var f = function foo(){};
window.foo = f;
alert( window.foo === f ); // false
}() );