> Всегда ли замыкание в JavaScript хранит один и тот же экземпляр внешних данных (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: Кэтрид Диджитал

Стек: JavaScript

> Пример ответа

Нет, не всегда. Замыкание в JavaScript хранит ссылку на внешние переменные, а не их копию. Это означает, что если внешняя переменная изменяется, все замыкания, которые её захватили, увидят новое значение. Однако, если замыкание создаётся в разных вызовах внешней функции, каждый вызов порождает свой собственный экземпляр лексического окружения, и замыкания будут ссылаться на разные экземпляры данных.

Пример:

JAVASCRIPT
function createCounter() {
let count = 0;
return function() {
count++;
return count;
};
}
const counter1 = createCounter();
const counter2 = createCounter();
console.log(counter1()); // 1
console.log(counter1()); // 2
console.log(counter2()); // 1 (новый экземпляр count)

В этом примере counter1 и counter2 - разные замыкания, каждое со своим экземпляром count. Но если бы мы использовали одну и ту же внешнюю переменную (например, глобальную), то все замыкания разделяли бы её.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью