Вывод: 1, 1, 2, 2. First и second имеют независимые окружения, а alias ссылается на ту же функцию, что first, и использует её счётчик.
Каков вывод счётчиков с префиксным ++count?
Вывод: 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. Это различие между копированием ссылки на функцию и созданием нового замыкания.