Каталог
Веб-разработка с нуля: четыре курса по порядку.
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Каталог
HTML, затем CSS, JavaScript и SQL. Каждый курс говорит, что нужно знать до него и что вы будете уметь после.
Загружаем курсы…
Урок 89 из 114 · 9 мин
WeakMap, WeakSet, WeakRef и FinalizationRegistry: коллекции, которые не мешают сборщику мусора.
Каждая удалённая карточка остаётся в вашем кэше навсегда. Память тает! Хе-хе.
Слабые коллекции не держат объект в памяти: как только на него больше никто не ссылается, запись исчезает сама.
WeakMapsize.const meta = new WeakMap();
const card = {};
meta.set(card, { clicks: 1 });
console.log(meta.get(card).clicks, meta.has({}));set() · get() · has() · delete()size и clear.const wm = new WeakMap();
const k = {};
wm.set(k, 1);
console.log(wm.get(k), wm.has(k), wm.delete(k), wm.has(k));WeakSetadd, has, delete.const handled = new WeakSet();
const order = {};
handled.add(order);
console.log(handled.has(order), handled.delete(order), handled.has(order));WeakRef · deref()new WeakRef(obj) не мешает удалить объект; ref.deref() вернёт объект или undefined, если его уже собрали.const big = { data: new Array(1000).fill(0) };
const ref = new WeakRef(big);
console.log(ref.deref() === big);FinalizationRegistryregistry.register(obj, info) — после сборки obj вызовется колбэк с info; unregister(token) отменяет. Момент вызова не гарантирован.const registry = new FinalizationRegistry((info) => console.log("Собран", info));
const token = {};
registry.register({}, "карточка", token);
console.log(registry.unregister(token));Данные «при объекте», которые должны исчезать вместе с ним, — в WeakMap.
Напиши cached(obj, compute): хранит результат compute(obj) в WeakMap и при повторном вызове с тем же объектом не вызывает compute снова.
Выберите один ответ.
Какие ключи допускает WeakMap?
Выберите один ответ.
Можно ли перебрать WeakMap через for…of?
Проверяем состояние обучения…