Каков вывод счётчиков с префиксным ++count?

Вывод: 1, 1, 2, 2. First и second имеют независимые окружения, а alias ссылается на ту же функцию, что first, и использует её счётчик.

Короткий ответ

Что ответить на собеседовании

Вывод: 1, 1, 2, 2. First и second имеют независимые окружения, а alias ссылается на ту же функцию, что first, и использует её счётчик.

Подробный разбор

Ответ с пояснениями

Условие

Определите результат:

function makeCounter() { let count = 0; return () => ++count; }
const first = makeCounter();
const second = makeCounter();
const alias = first;
console.log(first(), second(), alias(), second());

Ответ

Вывод: 1, 1, 2, 2. First и second имеют независимые окружения, а alias ссылается на ту же функцию, что first, и использует её счётчик.

Префиксный инкремент сначала увеличивает значение и затем возвращает его, поэтому последовательности начинаются с 1. Присваивание alias = first не вызывает фабрику и не создаёт копию закрытых переменных. Для независимого третьего счётчика пришлось бы снова вызвать makeCounter. Это различие между копированием ссылки на функцию и созданием нового замыкания.

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

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

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

Подробнее