Ответ вслух Junior Области видимости и замыкания спрашивают часто обновлено

Объясните замыкание на примере

Вопрос

Объясните, что такое замыкание, и приведите пример, где вы использовали его на практике.

Попробуйте сами

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

Показать ответ и разбор

Коротко

Образцовый ответ: «Замыкание это функция вместе с окружением, в котором её создали. Когда функция объявляется, она запоминает ссылку на внешние переменные, и пока функция жива, живо и это окружение.

Что должно прозвучать в ответе

  • Определение: функция плюс лексическое окружение, где она создана

  • Окружение живёт, пока жива функция, даже после завершения внешней

  • Хранится ссылка на переменную, а не копия значения

  • Пример: приватный счётчик или фабрика функций

  • Практика: debounce, мемоизация, обработчики событий, хуки React

  • Обратная сторона: устаревшие значения и удержание памяти

Что могут спросить следом

  • Что выведет цикл с var и setTimeout, как исправить без let?
  • Что такое stale closure в React и как с ним бороться?
  • Может ли замыкание привести к утечке памяти?

Разбор

Образцовый ответ: «Замыкание это функция вместе с окружением, в котором её создали. Когда функция объявляется, она запоминает ссылку на внешние переменные, и пока функция жива, живо и это окружение. Классический пример: createCounter объявляет let count = 0 и возвращает функцию inc, которая увеличивает count. Внешняя функция уже отработала, а inc продолжает менять свой count, и снаружи до него не добраться, то есть получилось приватное состояние. Важно, что замыкание держит ссылку на переменную, а не снимок значения. На практике я сталкиваюсь с замыканиями постоянно: debounce хранит id таймера в замыкании, мемоизация хранит кеш, обработчик клика помнит данные элемента. В React каждый рендер создаёт новые функции, которые замыкают значения своего рендера, и отсюда типичный баг с устаревшим состоянием внутри setInterval. Его лечат функциональным обновлением или правильными зависимостями эффекта. Ещё замыкание может удерживать большие данные в памяти, если обработчик не отписан».

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.