Может кто-нибудь объяснить это?IE8
( function(){ window.foo = function foo(){}; console.log( window.foo === foo ); // false }() );
Из-за ошибки IE, выражение названной функции создает отдельную локальную переменную foo с отдельной копией функции.
foo
Подробнее :
var f = function g(){}; f === g; // false Здесь все становится интереснее. Вернее - совершенно чокнутый. Здесь мы видим опасность иметь дело с двумя различными объектами - увеличение одного из них, очевидно, не меняет другого; Это может быть довольно проблематично, если вы решили использовать, скажем, механизм кэширования и сохранить что-либо в свойстве f, а затем попытаться получить к нему доступ как свойство g, думая, что это тот же объект, с которым вы работаете.
var f = function g(){}; f === g; // false
Здесь все становится интереснее. Вернее - совершенно чокнутый. Здесь мы видим опасность иметь дело с двумя различными объектами - увеличение одного из них, очевидно, не меняет другого; Это может быть довольно проблематично, если вы решили использовать, скажем, механизм кэширования и сохранить что-либо в свойстве f, а затем попытаться получить к нему доступ как свойство g, думая, что это тот же объект, с которым вы работаете.
Если вы заинтересованы в исправлении проблемы, это сработает.
( function(){ var f = function foo(){}; window.foo = f; alert( window.foo === f ); // false }() );