Я тут задумался, а как работает сборщик мусора в JS?
//
var obj = {a: 10}; // Создается в памяти некий "объект 1"
var container = {o: obj}; // Создается в памяти некий "объект 2", в котором есть ссылка на "объект 1"
obj = container = null;
При этом сначала из памяти удалиться "объект 2", поскольку на него больше никто не ссылается.
А потом и "объект 1", поскольку теперь и на него никто не ссылается.
Пока вроде все правильно.
А если так?
var obj = {a: 10}; // Создается в памяти некий "объект 1"
var container = {o: obj}; // Создается в памяти некий "объект 2", в котором есть ссылка на "объект 1"
obj.c = container; // Создаем обратную ссылку
obj = container = null;
Теперь "объект 1" не может быть удален, поскольку на него ссылается "объект 2".
А "объект 2" не может быть удален, поскольку на него ссылается "объект 1".
1. Я правильно понимаю?
2. И единственный выход удалить объекты из памяти - вручную поудалять обратные ссылки?