const frame = {
key: {}
};
const map = new WeakMap();
map.set(frame.key, 'value');
console.log(map); // { {} -> 'value' }
delete frame.key;
// Force GC
console.log(map); // { {} -> 'value' }
В таком фрагменте кода, почему key
не собирается? Я думал, что как только я delete
key
, frame
перестанет удерживать его, и его счетчик ссылок станет равным нулю, таким образом, либо запустив GC, либо, по крайней мере, он будет собран GC, который я запускаю вручную.
Я запустил GC в Firefox, перейдя на about:memory
и нажав все кнопки в поле Свободная память .
Я предполагал, что карта будет либо пустой, либо, по крайней мере, при проверке ее в Инструментах разработчика ключ не будет отображаться как реальная ссылка. Но, похоже, это не то, что происходит.
Я могу подтвердить, что представление в Инструментах разработчика не устарело, поскольку я могу развернуть объект карты с помощью entries[0]
и щелкнуть правой кнопкой мыши значение key
, выбрав Сохранить как глобальный объект и когда я оцениваю , что , я получаю нормальную проверку, без ошибок, ничего.