Найти в Дзене
Как создать сайт

Структуры WeakMap и WeakSet

Здравствуйте!  В этом уроке речь пойдет  о таких  конструкциях в 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 –  другая структура в этом аспекте. Она не предотвращает удаление объектов сборщиком мусора, когда эти объекты выступают в качестве ключей.

Давайте посмотрим, что это означает, на примерах. Читать далее