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