Что будет напечатано в консоль при выполнении кода №102

Будут выведены 0, 1, 2, 0. Присваивание c.counter = 0 создаёт свойство функции c, но не меняет закрытую переменную counter.

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

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

Будут выведены 0, 1, 2, 0. Присваивание c.counter = 0 создаёт свойство функции c, но не меняет закрытую переменную counter.

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

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

Условие

Нужно предсказать, какие значения появятся в консоли после запуска следующего JavaScript‑скрипта.

function Count() {
  let counter = 0;

  return () => {
    console.log(counter++);
  };
}

const c = new Count();

c(); // 
c(); // 

c.counter = 0;

c(); // 

const b = new Count();

b(); // 

Ответ

Будут выведены 0, 1, 2, 0. Присваивание c.counter = 0 создаёт свойство функции c, но не меняет закрытую переменную counter.

Конструктор Count явно возвращает стрелочную функцию — объект, поэтому new отдаёт именно её, а не обычный экземпляр с полями. Стрелка замыкает локальный counter соответствующего вызова Count.

Постфиксный counter++ сначала передаёт прежнее значение в console.log, затем увеличивает. У c собственное замыкание, которое продолжается с 2 несмотря на внешнее свойство. Новый вызов new Count() для b создаёт независимую локальную переменную со значением 0.

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

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

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

Подробнее