израз на функция на 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
Ако chrome зареди тези изрази предварително, втората foo() декларация ще замени първата си декларация?   -  person BatScream    schedule 03.01.2015
comment
Условно декларирани функции във FF. Забележете, че това, което имате, е декларация на функция, а не израз.   -  person Teemu    schedule 03.01.2015


Отговори (1)


Това е случай на повдигане на функцията. Всяка функция, декларирана с идентично име на функция, последната функция с това име ще получи предимство и ще се използва дори ако е нула. В повечето случаи декларацията на функцията се обработва преди изпълнението на скрипта, но с Firefox това не е така, той я приема така, както идва в блок if.

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