if (true) {
function foo(){ return 1; }
}
else {
function foo(){ return 2; }
}
foo();
Горният код е пример за израз на функция и връща 1 във Firefox 28, докато 2 в Chrome (очакван резултат). Защо firefox дава грешен резултат?
if (true) {
function foo(){ return 1; }
}
else {
function foo(){ return 2; }
}
foo();
Горният код е пример за израз на функция и връща 1 във Firefox 28, докато 2 в Chrome (очакван резултат). Защо firefox дава грешен резултат?
Това е случай на повдигане на функцията. Всяка функция, декларирана с идентично име на функция, последната функция с това име ще получи предимство и ще се използва дори ако е нула. В повечето случаи декларацията на функцията се обработва преди изпълнението на скрипта, но с Firefox това не е така, той я приема така, както идва в блок if.
if
. FF повдига декларирани функции, както и други браузъри, когато са декларирани извън блок if
.
- person Teemu; 03.01.2015
chrome
зарежда функционалните изрази, преди да изпълни който и да е ред от код, докатоfirefox
го прави, когато неговият интерпретатор достигне реда за деклариране на функциите? - person BatScream   schedule 03.01.2015foo()
декларация ще замени първата си декларация? - person BatScream   schedule 03.01.2015