Хотя я не мог легко найти ссылку на это в google, я знаком с тем фактом, что в javascript объявления глобальных функций интерпретируются перед выполнением любого кода.Другими словами, это прекрасно работает:
f();
function f() {}
Однако я заметил, что chrome и firefox по-разному интерпретируют глобальное объявление функции.В частности, chrome рад чтению объявления функции, которое находится внутри блока if на первом проходе, а firefox - нет.
try {document.write(f);} // works in chrome
catch(e) {document.write(e.message);} // throws an error in firefox
try {document.write(g);} // works in chrome and firefox
catch(e) {document.write(e.message);}
if(true) function f() {}
function g() {}
Вы можете попробовать этот пример самостоятельно с этим fiddle ,Я использую Chrome 16.0.912.75 и Firefox 9.0.1.
Что такое стандарт ECMA для этого поведения?Есть ли термин для этого процесса «поднятия» объявлений функций над другим кодом?Какой код становится «поднятым» открытым для интерпретации (оба браузера правы)?Или это ошибка в одном из них?