Два объявления одной функции внутри другой

Будет выведено 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, порядок исполнения присваивания станет важен. Дублирующие объявления ухудшают читаемость, поэтому в реальном коде их лучше устранить.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее