> Всегда ли замыкание в JavaScript хранит один и тот же экземпляр внешних данных (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: Кэтрид Диджитал
Стек: JavaScript
> Пример ответа
Нет, не всегда. Замыкание в JavaScript хранит ссылку на внешние переменные, а не их копию. Это означает, что если внешняя переменная изменяется, все замыкания, которые её захватили, увидят новое значение. Однако, если замыкание создаётся в разных вызовах внешней функции, каждый вызов порождает свой собственный экземпляр лексического окружения, и замыкания будут ссылаться на разные экземпляры данных.
Пример:
JAVASCRIPTfunction createCounter() {let count = 0;return function() {count++;return count;};}const counter1 = createCounter();const counter2 = createCounter();console.log(counter1()); // 1console.log(counter1()); // 2console.log(counter2()); // 1 (новый экземпляр count)
В этом примере counter1 и counter2 - разные замыкания, каждое со своим экземпляром count. Но если бы мы использовали одну и ту же внешнюю переменную (например, глобальную), то все замыкания разделяли бы её.
> Похожие задачи по frontend
Может ли быть несколько экземпляров лексического окружения замыкания в JavaScript
Какая польза от внутренней функции, используемой снаружи внешней функции в JavaScript
Какие механизмы в JavaScript позволяют писать отзывчивые пользовательские приложения
Почему метод splice в JavaScript возвращает вырезанные элементы и является ли он мутабельным
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью