Как выполняется обратный вызов с аргументами? - PullRequest
1 голос
/ 11 июня 2009

Я познакомился с 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 ]

3 голосов
/ 11 июня 2009

Это действительно довольно расплывчатый пример. Вы должны написать:

$.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 с двумя параметрами.

1 голос
/ 11 июня 2009

В первом случае myCallBack(param1, param2) вычисляется и выполняется немедленно. В этом синтаксисе он будет вызываться до вызова $.get().

Во втором случае определяется безымянная анонимная функция, которая включает myCallBack() для последующего использования. Он сохраняется как параметр $.get() и будет запущен ТОЛЬКО ПОСЛЕ вызова $.get().

Для получения дополнительной информации о обратных вызовах см. Обратный вызов (информатика) в Википедии.

0 голосов
/ 11 июня 2009

Если вы используете этот синтаксис:

myCallBack(param1, param2) 

То, что вы делаете, - это вызов функции и получение результата, как и в любой другой раз, когда вы вызываете функцию.

Если вы используете этот синтаксис:

myCallBack

Вы вызываете не функцию, а упоминаете функцию, поэтому этот синтаксис можно использовать для передачи myCallBack в качестве функции обратного вызова.

Третий способ:

function(){myCallBack(param1, param2);}

Создает новую безымянную функцию, которая состоит из вызова myCallBack. Это может быть передано в вызов функции или присвоено переменной.

Кроме того, вы должны быть осторожны, используя этот синтаксис так же, как в примере, потому что в этом случае param1 и param2 не связаны анонимной функцией и будут либо пустыми, либо заполнены значениями из содержащий объем.

...