Независимы ли два счётчика, созданные одним замыканием?

Вывод: 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, состояние оказалось бы общим, но в данном коде она локальна каждому вызову фабрики.

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

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

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

Подробнее