Будет выведено 2: при создании окружения f одноимённая привязка получает последнее из этих объявлений. Текстовое положение вызова до объявлений этому не мешает.
Два объявления одной функции внутри другой
Будет выведено 2: при создании окружения f одноимённая привязка получает последнее из этих объявлений. Текстовое положение вызова до объявлений этому не мешает.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Что выведет этот классический JavaScript script?
function f() {
console.log(A());
function A() { return 1; }
function A() { return 2; }
}
f();
Оба объявления находятся непосредственно в теле f, не в блоках.
Ответ
Будет выведено 2: при создании окружения f одноимённая привязка получает последнее из этих объявлений. Текстовое положение вызова до объявлений этому не мешает.
Это пример function declarations, а не присваиваний функциональных выражений переменной. Если вместо второго объявления написать A = () => 2 после console.log, порядок исполнения присваивания станет важен. Дублирующие объявления ухудшают читаемость, поэтому в реальном коде их лучше устранить.