Здравствуйте! В этом уроке речь пойдет о таких конструкциях в JavaScript, как WeakMap и WeakSet они чем то схожи с у же рассмотренными Map и Set, но есть и отличия которые мы с вами и разберем. Как правило свойства объекта, элементы массива или другой структуры данных сохраняются в памяти до тех пор, пока эта структура данных хранится в памяти.
Например, если поместить объект в массив, то до тех пор, пока массив существует, объект также будет существовать в памяти, несмотря на то, что других ссылок на него может и не быть.
Например:
let john = { name: "John" };
let array = [ john ]; john = null;
// перезаписываем ссылку на объект
// объект john хранится в массиве, поэтому он не будет удалён сборщиком мусора
// мы можем взять его значение как array[0]
Аналогично, если используется объект как ключ в Map, то до тех пор, пока существует этот самый Map, также будет существовать и этот объект. Он занимает место в памяти и не может быть удалён сборщиком мусора.
Например:
let john = { name: "John" };
let map = new Map();
map.set(john, "..."); john = null;
// перезаписываем ссылку на объект
// объект john сохранён внутри объекта `Map`,
// он доступен через map.keys()
WeakMap – другая структура в этом аспекте. Она не предотвращает удаление объектов сборщиком мусора, когда эти объекты выступают в качестве ключей.
Давайте посмотрим, что это означает, на примерах. Читать далее