Ответ 1
Из-за автоматической вставки точки с запятой. Первый код такой же, как
function func1() {
return;
{
foo: 'bar'
}
}
Если вам интересно, почему этот код не создает синтаксическую ошибку, foo:
является label.
Относительно
Это языковая функция или ошибка?
Это особенность. Но очень опасный. Лучший способ сохранить его в качестве функции для вас - придерживаться последовательного стиля форматирования (я бы предложил использовать руководство по стилю Google, пока вы не испытаете достаточно сделайте свой собственный).