IE8 `window.fn! == fn` - PullRequest
       2

IE8 `window.fn! == fn`

11 голосов
/ 27 декабря 2011

Может кто-нибудь объяснить это?IE8

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

Ответы [ 2 ]

13 голосов
/ 27 декабря 2011

Из-за ошибки IE, выражение названной функции создает отдельную локальную переменную foo с отдельной копией функции.

Подробнее :

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

Здесь все становится интереснее. Вернее - совершенно чокнутый. Здесь мы видим опасность иметь дело с двумя различными объектами - увеличение одного из них, очевидно, не меняет другого; Это может быть довольно проблематично, если вы решили использовать, скажем, механизм кэширования и сохранить что-либо в свойстве f, а затем попытаться получить к нему доступ как свойство g, думая, что это тот же объект, с которым вы работаете.

1 голос
/ 27 декабря 2011

Если вы заинтересованы в исправлении проблемы, это сработает.

( function(){
    var f = function foo(){};
    window.foo = f;
    alert( window.foo === f ); // false
}() );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...