Запрещает ли строгий режим декларации функций уровня инструкции?

"use strict"; if (true) { function foo() { } } 

В PhpStorm этот код показывает ошибку:

Утверждение функции не на верхнем уровне программы или функции запрещено

Тем не менее, Chrome счастливо выполняет его, даже в отладчике и без вывода консоли.

Теперь это запрещено или нет?

    Да, в ES5 они запрещены (и в строгом режиме, все реализации бросают). См. Также замечательную статью Kangax для операторов функций в неаккуратном режиме.

    Однако в ES6 они представляют собой объявления функций уровня блока с новой семантикой. См. Также Какова четкая семантика функций уровня блока в ES6? , Это похоже на то, что Chrome реализует здесь; foo недоступен вне блока if .

    Interesting Posts
    Давайте будем гением компьютера.