В основном вам нужно удалить все ссылки на эти функции, чтобы сборщик мусора JavaScript мог их собрать. Если они связаны, вам нужно их отменить. Если там есть другие переменные, которые указывают на них, они должны быть установлены в нуль.
Может помочь, если вы разместили какой-то код; тогда мы можем дать лучший ответ.
... EDIT:
Что здесь происходит, вы создаете замыкание, которое переживет содержащуюся функцию:
function edit(){
$('.edit').click(function(){
//...
function _edit(boxTitle,selectedItemAmount){
//...
$('#box .yes').click(function(){
alert(boxTitle + ' for ' + selectedItemAmount + ' selected item');
$('#msg').hide(); // hide msg box when yes btn is clicked
});
}
//...
$('#box .no').click(function(){
$('#msg').hide();
});
});
Другими словами, внутри функции вы говорите: «Присоедините эту функцию к объекту DOM», и вы делаете это встроенным образом. JavaScript захватывает переменные из внешних контекстов и сохраняет их живыми, пока ссылка на внутренний контекст жива.
Что вам нужно сделать, это определить функции где-то не встраиваемые, а затем использовать их:
function boxClickYes(e) {
alert(e.data.boxTitle + ' for ' + e.data.selectedItemAmount +
' selected item');
$('#msg').hide(); // hide msg box when yes btn is clicked
}
function boxClickNo(e) {
$('#msg').hide();
}
function edit(){
$('.edit').click(function(){
//...
function _edit(boxTitle,selectedItemAmount){
//...
$('#box .yes').bind("click", {boxTitle: boxTitle,
selectedItemAmount: selectedItemAmount}, boxClickYes);
}
//...
$('#box .no').click(boxClickNo);
});
Это также демонстрирует, как использовать свойство data в обработчиках кликов jQuery для хранения данных между временем, когда вы присоединяете обработчик, и временем, когда вы его используете (вместо того, чтобы хранить эти данные в замыкании, которое сохранит цепочку областей в памяти ). Использование встроенных функций хорошо, когда вы просто используете его прямо здесь (например, тело $.each
), но это не нормально, когда вы присоединяете обработчики событий.