Единственная ссылка на анонимную функцию - это аргумент функции, который исчезает после завершения функции, поэтому ваш обратный вызов будет доступен для сборки мусора после этого.За исключением случаев, когда что-то еще получает ссылку на него, что может легко произойти с замыканиями:
function doo(callback) {
$.get(url, function() {
// callback is visible here!
});
callback();
}
doo(function() { /* do something else */ });
callback
(вместе со всей областью, созданной путем вызова doo
) должны оставаться в памяти, потому чтовнутренняя функция может ссылаться на него через замыкание;сборка мусора возможна только тогда, когда внутренняя функция является сборщиком мусора, и поскольку эта функция является свойством объекта jqXHR, этот объект должен быть перед этим сборщиком мусора, и кто знает, когда это произойдет ...
Обновление Вы можете избежать ненужных замыканий, не определяя свои функции внутри других функций:
var func = function() {
// callback is not visible here
}
function doo(callback) {
$.get(url, func);
callback();
}
doo(function() { /* do something else */ });