Я реализую одностраничное приложение.Очистка Javascript из памяти после загрузки AJAX
У меня есть контейнер div (<div id="container"/>
), где я загружаю html-контент, используя AJAX
.
// function that is overwritten by loadMenu functions
// and gets called before loading a new section
function unbindPreviousSection() { };
// load contacts
function loadContactsMenu() {
unbindPreviousSection();
unbindPreviousSection = function() { };
$.get("/Home/Contacts", function (data, status) {
if (status === "success") {
$("#content").html(data);
contactsMenu.bind();
unbindPreviousSection = contactsMenu.unbind;
}
});
};
// load profile
function loadProfileMenu() {
unbindPreviousSection();
unbindPreviousSection = function() { };
$.get("/Home/Profile", function (data, status) {
if (status === "success") {
$("#content").html(data);
unbindPreviousSection = function() {
// specific unbind methods for this menu
};
}
});
};
var contactsMenu = {};
(function() {
var viewModel = null;
contactsMenu.bind = function() {
viewModel = {
phones: ko.observableArray()
};
};
contactsMenu.addPhone = function (phone) {
viewModel.phones.push(phone);
};
contactsMenu.unbind = function() {
viewModel = null;
};
}());
Внутри любой функции нагрузки меню, я внутренне назвать unbind
метод предыдущего загруженного меню.
loadContactsMenu();
loadProfileMenu(); // internally calls contactsMenu.unbind();
Прежде чем я загрузить все данные, я называю unbindPreviousSection()
функцию, чтобы расположить предыдущие данные меню.
Мой вопрос:
ли viewModel
переменная внутри contactsMenu
объект все еще сохраняющиеся после того, как я называю contactsMenu.unbind()
даже если я установить его в нуль? (создает ли утечки памяти?)
Функция contactsMenu.addPhone
создает замыкание, которое сохраняет в памяти viewModel
переменная (потому что используется внутри функции)?