Является ли Firefox технически правильным в подъеме функций внутри операторов if с последними ECMA?

Я узнал, что следующее не работает в FF и работает в любом другом стандартном браузере.

if(jQuery){
    importantScript();

    function importantScript(){
        console.log("this is important");
    };
}

Это связано с тем, что FF не поднимает функции внутри операторов if. Похоже, раньше это было правилом, но я читал страница 533 (B.3.3) и B.3.4 вот заметки об обрыве:

До ECMAScript 2015 спецификация ECMAScript не определяла вхождение FunctionDeclaration как элемента списка StatementList инструкции Block. Однако поддержка этой формы FunctionDeclaration была допустимым расширением, и большинство реализаций ECMAScript, размещенных в браузере, допускали их. К сожалению, семантика таких объявлений различается в разных реализациях. Из-за этих семантических различий существующий веб-код ECMAScript, использующий объявления функций на уровне блоков, переносим между реализациями браузера только в том случае, если использование зависит только от семантического пересечения всех реализаций браузера для таких объявлений. Ниже приведены варианты использования, которые подпадают под эту семантику пересечения:

  1. Функция объявлена ​​и на нее ссылаются только в пределах одного блока

  2. Функция объявляется и, возможно, используется в одном блоке, но на нее также ссылается внутреннее определение функции, которое не содержится в этом же блоке.

  3. Функция объявляется и, возможно, используется в одном блоке, но также упоминается в последующих блоках.

Можете ли вы помочь мне интерпретировать это? Я чувствую, что приведенный выше код будет соответствовать техническим правилам, описанным выше.


person notthehoff    schedule 23.10.2015    source источник
comment
Поднятие функций в блоках — это новое правило в ES6, которое еще не реализовано в некоторых версиях FF. В конце концов они будут.   -  person Bergi    schedule 16.11.2016