Как уже отмечали другие, поскольку вне функции нет ссылки на a
, сборщик мусора будет собирать ее, скорее всего, при следующей сборке.
Некоторые вещи, которые вам нужно остерегаться,однако это косвенный захват.Обычно это происходит в обработчиках событий посредством захвата закрытия.Например,
function stuff() {
var a = new SomeLargeObject();
$("#somediv").click(function () { /* something */ });
}
Даже если вложенная функция не использует a
.a
может остаться в живых, потому что запись активации stuff
все еще жива.Кроме того, объекты DOM могут быть собраны не так, как обычные объекты JavaScript, что может привести к тому, что они станут восприимчивыми круговыми ссылками, что вызовет проблемы с коллекцией.Это наиболее проблематично в старых браузерах, и поскольку вы ссылаетесь с помощью браузеров Canvas, которые поддерживают Canvas, как правило, они более современные и правильно обрабатывают циклические ссылки, а также позволяют собирать локальные переменные, не захваченные замыканием.