Жаль, что на это ответили в комментариях, потому что никто не получил закрытие (извините, ужасная игра слов) @ Шиме Видас и @WaiLam заслуживают похвалы, но я по крайней мере постараюсь найти ответ:
Пока у вас есть ссылка на объект (хотя переменная myAjaxRequest
), он будет оставаться в памяти, пока документ не будет выгружен. Если для переменной (myAjaxRequest = null
), и назначено значение null, других ссылок на объект больше нет, сборщик мусора освободит память, использованную для его хранения.
Ссылка может существовать, даже если myAjaxRequest
является локальной переменной внутри функции. Функция может возвращать ссылку на локальную переменную, например, в виде свойства объекта, например:
function sandbox () {
var myAjaxRequest = A.io.request(/* constructor... */);
return {
myRequest: myAjaxRequest
};
}
var mySandbox = sandbox();
mySandbox.myRequest.start();
или он может вернуть ссылку через замыкание ( отличное объяснение здесь ), например:
function sandbox () {
var myAjaxRequest = A.io.request(/* constructor... */);
return {
getRequest: function () {
return myAjaxRequest;
}
};
}
var mySandbox = sandbox();
mySandbox.getRequest().start();
Пока у вас есть ссылка на ваш объект, он не будет собирать мусор. Вы можете безопасно вызывать метод start
, пока страница не будет выгружена.