> Как сделать так, чтобы функция в Map могла быть удалена сборщиком мусора в JavaScript (JavaScript)

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

Компании: ООО Снэп АйТи

Стек: JavaScript

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

Чтобы функция, переданная в Map, могла быть удалена сборщиком мусора, необходимо использовать WeakMap вместо обычного Map. В WeakMap ключи должны быть объектами, и если на ключ больше нет ссылок извне, соответствующая пара ключ-значение автоматически удаляется сборщиком мусора. Однако, если вы хотите, чтобы именно функция (как значение) могла быть собрана, нужно, чтобы на неё не оставалось других ссылок, и она была привязана к ключу, который сам может быть удалён.

Пример с WeakMap:

JAVASCRIPT
const cache = new WeakMap();
function createExpensiveFunction() {
const fn = () => console.log('heavy work');
// Функция fn будет удалена, когда объект key будет собран GC
cache.set({}, fn);
return fn;
}

Если же вы используете обычный Map, то функция останется в памяти, пока существует сама Map, даже если на неё нет других ссылок. Для удаления из Map вручную используйте map.delete(key) или map.clear().

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

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