Вывод: 0, 1, 0, 2, 1. Каждый вызов counter создаёт отдельную переменную value; постфиксный инкремент возвращает старое значение и затем увеличивает её.
Независимы ли два счётчика, созданные одним замыканием?
Вывод: 0, 1, 0, 2, 1. Каждый вызов counter создаёт отдельную переменную value; постфиксный инкремент возвращает старое значение и затем увеличивает её.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите вывод JavaScript:
function counter() { let value = 0; return () => value++; }
const a = counter();
const b = counter();
console.log(a(), a(), b(), a(), b());
Ответ
Вывод: 0, 1, 0, 2, 1. Каждый вызов counter создаёт отдельную переменную value; постфиксный инкремент возвращает старое значение и затем увеличивает её.
Два первых вызова a используют один экземпляр окружения и оставляют его value равным 2. Первый вызов b работает с другим окружением, начиная с нуля. Последующие вызовы продолжают собственные последовательности. Если бы value была вынесена за пределы counter, состояние оказалось бы общим, но в данном коде она локальна каждому вызову фабрики.