Коллега случайно наткнулся на следующее различие в работе браузеров. Используются последнии версии.
Код:
<html>
<head>
<script>
function test() {
functionExpressionOrFunctionDeclaration();
if (true) {
function functionExpressionOrFunctionDeclaration() {
console.log('run');
}
}
}
test();
</script>
</head>
</html>
Chrome выведет 'run'.
Firefox (IE11 тоже) выведет 'ReferenceError: functionExpressionOrFunctionDeclaration is not defined'.
В документации
https://developer.mozilla.org/en-US/docs/Web/JavaS... написано почему так происходит.
"A function declaration is very easily (and often unintentionally) turned into a function expression."
Я всегда считал, что в данном случае поведение у Хрома верное, но теперь засомневался, а в спецификации ECMAScript не смог найти ответа.
Какой браузер себя ведёт правильно?