Javascript IE8`window.fn!==fn`

Javascript IE8`window.fn!==fn`,javascript,internet-explorer,internet-explorer-8,Javascript,Internet Explorer,Internet Explorer 8,有人能解释一下吗?IE8 ( function(){ window.foo = function foo(){}; console.log( window.foo === foo ); // false }() ); 由于IE错误,命名的函数表达式创建了一个单独的局部foo变量,其中包含函数的单独副本 : 这就是事情变得有趣的地方。或者更确切地说,完全疯了。在这里,我们看到了必须处理两个不同对象的危险——增加其中一个对象显然不会修改另一个对象;如果您决定使用缓存机制并将某些内容

有人能解释一下吗?IE8

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

由于IE错误,命名的函数表达式创建了一个单独的局部
foo
变量,其中包含函数的单独副本

:

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


如果您对纠正问题感兴趣,这将起作用

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

太棒了,谢谢。我以前读过,但直到现在才被它击中。再一次,javascript是一团混乱。非常好地阅读了“命名函数表达式”,这就是你所得到的:
( function(){
    var f = function foo(){};
    window.foo = f;
    alert( window.foo === f ); // false
}() );