Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

Документы

Медиа

Назад
Вопрос про JavaScript: closure, lexical

Как реализовать счётчик с помощью замыкания?

Вопрос проверяет понимание замыканий, области видимости и инкапсуляции состояния.

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

Счётчик через замыкание реализуется функцией, которая хранит состояние во внешней переменной и возвращает внутреннюю функцию. Эта внутренняя функция имеет доступ к переменной даже после завершения внешней функции. Таким образом состояние становится приватным и недоступным напрямую извне. Каждый вызов фабричной функции создаёт независимый счётчик.

Длинный ответ

Замыкание позволяет функции “помнить” переменные из той области видимости, где она была создана.

Определение

Замыкание (closure) — это функция вместе с лексическим окружением, в котором она была объявлена.

Базовая реализация счётчика

function createCounter() {
  let count = 0;

  return function () {
    count += 1;
    return count;
  };
}

const counter = createCounter();

counter(); // 1
counter(); // 2
counter(); // 3

Что здесь происходит

  1. count — локальная переменная createCounter.

  2. Возвращаемая функция имеет доступ к count.

  3. count не удаляется после завершения createCounter.

Несколько независимых счётчиков

const c1 = createCounter();
const c2 = createCounter();

c1(); // 1
c1(); // 2
c2(); // 1

Расширенный вариант с методами

function createCounter() {
  let count = 0;

  return {
    inc() {
      count += 1;
      return count;
    },
    reset() {
      count = 0;
    },
    get() {
      return count;
    }
  };
}

Почему это полезно

  1. Состояние инкапсулировано.

  2. Нет глобальных переменных.

  3. Поведение предсказуемо и тестируемо.

Вывод

Счётчик через замыкание — классический пример использования лексической области видимости для хранения приватного состояния и создания независимых экземпляров логики.

Уровень

  • Рейтинг:

    5

  • Сложность:

    5

Навыки

  • JavaScript

    JavaScript

Ключевые слова

#closure

#lexical

Подпишись на React Developer в телеграм