> Почему garbage collector не очищает переменную в случае замыкания в JavaScript (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: ITFB
Стек: JavaScript
> Пример ответа
В JavaScript замыкание создаётся, когда функция "запоминает" свою лексическую область видимости, даже после того, как внешняя функция завершила выполнение. Garbage collector (GC) не может очистить переменную, потому что на неё всё ещё существует ссылка из внутренней функции.
Например:
JAVASCRIPTfunction outer() {let bigData = new Array(1000000).fill('data');return function inner() {console.log(bigData.length);};}const closureFunc = outer(); // bigData не удаляется
Здесь inner содержит ссылку на bigData через замыкание. Пока closureFunc существует, GC видит, что bigData достижима через эту ссылку, и не освобождает память. Если бы замыкание не использовало переменную, современные движки (V8, SpiderMonkey) могли бы оптимизировать и удалить её, но при явном использовании - нет. Таким образом, замыкание "удерживает" переменную, предотвращая сборку мусора.
> Похожие задачи по frontend
Как реализовать функцию-обертку runOnce в JavaScript, вызывающую функцию только один раз?
Какой числовой формат даты подходит для сравнения объектов Date в JavaScript
Как сделать так, чтобы функция в Map могла быть удалена сборщиком мусора в JavaScript
Как реализовать функцию шаблонизатора строки с подстановкой параметров в JavaScript?
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью