Я сделал 2 примера для демонстрации моего вопроса:
/// first script
function a(){}
/// Outputs: undefined
/// second script
{
function a(){}
}
/// Outputs: f a(){}
Вы можете запустить оба примера в chrome dev-tools.
Теперь давайте посмотрим на спецификации:
14.1.21 Семантика времени выполнения: оценка
FunctionDeclaration: functionBindingIdentifier (FormalParameters) {FunctionBody}
- Возвращает NormalCompletion (пусто).
NOTE 1 An alternative semantics is provided in B.3.3.
FunctionDeclaration: function (FormalParameters) {FunctionBody}
- Возвращает NormalCompletion (пусто).
Таким образом, вы можете видеть, что FunctionDeclaration должна возвращать Completion([[Value]]: empty)
Хром дев-инструменты лежат?
P.S Firefox во втором примере outputs: undefined