выражение функции в firefox - не ожидаемый результат

if (true) {
  function foo(){ return 1; }
}
else {
  function foo(){ return 2; }
}
foo();

Приведенный выше код является примером выражения функции и возвращает 1 в Firefox 28, тогда как 2 в Chrome (ожидаемый результат). Почему Firefox дает неверный результат?


person Vivek Chandra    schedule 03.01.2015    source источник
comment
может быть chrome загружает функциональные выражения перед выполнением любой строки кода, тогда как firefox делает это, когда его интерпретатор достигает строки объявления функций?   -  person BatScream    schedule 03.01.2015
comment
Если хром загрузит эти выражения заранее, второе объявление foo() заменит его первое объявление?   -  person BatScream    schedule 03.01.2015
comment
Условно объявленные функции в FF. Обратите внимание, что у вас есть объявление функции, а не выражение.   -  person Teemu    schedule 03.01.2015


Ответы (1)


Это случай подъема функции. Любая функция, объявленная с идентичным именем функции, последняя функция с таким именем получит приоритет и будет использоваться, даже если она имеет значение null. В большинстве случаев объявление функции обрабатывается перед выполнением скрипта, однако с Firefox это не так, он принимает его так, как он находится внутри блока if.

person user1825743    schedule 03.01.2015
comment
[FF] принимает все как есть, да, но только в том случае, если объявление функции находится внутри блока if. FF поднимает объявленные функции так же, как и другие браузеры, если они объявлены вне блока if. - person Teemu; 03.01.2015