Концепция замыканий может быть объяснена как наличие функций и их контекстов. Контекст - это своего рода хранилище, прикрепленное к функции для разрешения захваченных переменных (например, с именем «закрытие»).
Когда выполняется код примера:
var add = (function () {
var counter = 0; // This is promoted to the below's function context
return function () {return counter += 1;}
})();
контекст, где переменная counter
продвигается к анонимному контексту функции, таким образом, вы можете получить доступ к этой переменной из текущей области.
Эта диаграмма более или менее объясняет это:
В этом случае X и Y захватываются контекстом функции и который переносится на все исполнения этой функции.
Теперь это только реализация V8 лексических сред .
См. Вячеслав Егоров большое объяснение по поводу закрытие с использованием V8: Гроккинг V8 закрывает для удовольствия (и прибыль?)
Вы не можете сделать это с .load()
напрямую, так как он возвращает объект jQuery для цепочки, но если вы переключитесь на полный вызов $.ajax()
с помощью .html()
вы можете, например, так:
var xhr = $.ajax({
url: 'mypage.htm',
success: function(data) {
$("#myElement").html(data);
}
});
//if needed, abort the request later..
xhr.abort();
При этом используется метод .abort()
объекта XMLHttpRequest для прерывания загрузки.
Ответ Ника был почти тем, что мне было нужно, но не совсем. Я использовал .load (), чтобы загрузить только изображение со страницы. Итак, продолжая ответ Ника ...
Так что вместо ...
$('#myElement').load('mypage.htm #myImage');
Я сейчас использую ...
var xhr = $.ajax({
url: 'mypage.htm',
success: function(data) {
$("#myElement").html($(data).find("#myImage"));
}
});
//if needed, abort the request later..
xhr.abort();
Вы можете сделать это, используя jQuery.ajax
вручную. Он вернет объект XMLHttpRequest
, который можно вызывать abort
при необходимости. В обработчике успеха вы можете использовать jQuery.html
$("#myElement").load("/mypage #mayImage", function(response, status, xhr) {
if (status == "error") {
xhr.abort();
}
});
Должно работать так ..
или по другому событию, я отправляю подтверждение на длинное поле, пользователь меняет содержимое, я хочу прекратить предыдущую проверку для повторной проверки:
xhr.abort();
$("#myElement").load("/mypage #mayImage", function(response, status, xhr) {
if (status == "error") {
xhr.abort();
}
});