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

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

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 будет ссылаться на "себя же" сразу после создания объекта
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы