Освободится ли память объекта?

Есть следующий код

function A(){
    var self = this; // Сохраняем this, чтобы потом её использовать в setTimeout
    this.timer = setTimeout(function(){
        self.clear();
    }, 0);
    this.clear = function(){
        // ....
    }
    // ....
}

var foo = new A();
foo = undefined; // Удаляем объект


Я слышал, что в JS у объектов есть счётчики, сколько на него ссылаются. И когда счётчик равен нулю, то сборщик мусора освобождает память.
На созданный объект существует две ссылки. Это foo и ссылка в самом объекте на "себя же".
Собственно вопрос: освободится ли память из под объекта или переменная self не позволит этого сделать
  • Вопрос задан
  • 103 просмотра
Решения вопроса 1
DIITHiTech
@DIITHiTech
Fullstack javascript developer
Освободится, а точнее будет помечен к освобождению, после отработки таймера, который до его срабатывания будет еще держать объект в памяти. К счастью, нынче считаются не тупо ссылки на сущности, как в старых ослах, а их доступность "по дереву" связей.
Т.е объект будет существовать до тех пор, пока к нему можно "достучатся" любым образом с внешнего пользовательского кода, включая системные callback'и, которые могут в замыкании держать ссылки на этот объект. Как только последняя связь разрывается, он помечается на удаление.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
severus256
@severus256
Code everywhere....
Освободится. Переменная self будет ссылаться на "себя же" сразу после создания объекта
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы