если убрать весь пафос WeakMap, с простыми переменными всё точно так же:
let value = { name: 'iOne' };
let x = value; // ещё одна "ссылка" на объект
value = null; // или delete value; – то же самое
x // { name: "iOne" }
Разберитесь с основами:
Объекты и ссылки на объекты. Т.к. в объекте weakMap есть ссылка от ключа на объект-значение — объект вполне себе сохраняется. Главное, что всё ещё жива ссылка на объект-ключ
key
.
Особенность WeakMap – в тех объектах, которые выступают не значениями, а ключами.
const weakMap = new WeakMap();
let value = {name: 'Ivan'};
let key = {};
// добавление нового элемента
weakMap.set(key, value);
// обнуление
delete key;
Теперь, хоть объект, на который указывала переменная
key
всё ещё используется в качестве ключа в WeakMap, сборщик мусора, при срабатывании, таки удалит его.