Как выполняется обратный вызов с аргументами?
Я познакомился с jQuery несколько дней назад и начинаю осознавать, какую маленькую магию он может сделать.
Мне любопытно узнать, как именно в jQuery выполняется обратный вызов с аргументами, т.е. какова точная последовательность выполнения?
Я прошел по ссылке http://docs.jquery.com/Tutorials:How_jQuery_Works
и это говорит о неправильном пути, т.е.
$.get('myhtmlpage.html', myCallBack(param1, param2));
и правильный путь, т.е.
$.get('myhtmlpage.html', function(){
myCallBack(param1, param2);
});
В первом случае сначала выполняется myCallBack, а затем его возвращаемое значение будет выступать в качестве аргумента для получения. В последнем методе get возвращает веб-страницу, которая будет обрабатываться myCallBack.
Как это работает так синтаксически, что оба имеют myCallBack как еще один аргумент для получения? Я немного запутался в этом.
ура
3 ответа
Это действительно довольно расплывчатый пример. Вы должны написать:
$.get('myhtmlpage.html', function(param1, param2){
myCallBack(param1, param2);
});
Это потому, что внутренне jQuery делает что-то вроде этого (очень упрощенно):
$.get = function(url, callback){
//make call to url
//when completed execute callback:
callback(param1, param2);
}
Вы также можете написать:
$.get('myhtmlpage.html', myCallBack);
Это также вызовет myCallBack с двумя параметрами.
В первую очередь, myCallBack(param1, param2)
оценивается и исполняется немедленно. В этом синтаксисе он будет вызываться раньше $.get()
называется.
Во втором случае определяется безымянная анонимная функция, которая включает myCallBack()
для последующего использования. Хранится в качестве параметра для $.get()
и будет уволен ТОЛЬКО ПОСЛЕ $.get()
называется.
Для получения дополнительной информации об обратных вызовах см. Обратный вызов (информатика) в Википедии.
Если вы используете этот синтаксис:
myCallBack(param1, param2)
Что вы делаете, это вызываете функцию и получаете результат, как и в любой другой раз, когда вы вызываете функцию.
Если вы используете этот синтаксис:
myCallBack
Вы не вызываете функцию, но упоминаете функцию, поэтому этот синтаксис может использоваться для передачи myCallBack в качестве функции обратного вызова.
Третий способ:
function(){myCallBack(param1, param2);}
Создает новую безымянную функцию, которая состоит из вызова myCallBack. Это может быть передано в вызов функции или назначено переменной.
Кроме того, вы должны быть осторожны, используя этот синтаксис так же, как в примере, потому что в этом случае param1 и param2 не связаны анонимной функцией и будут либо пустыми, либо заполнены значениями из содержащей области.