Подход новичка: что такое функция обратного вызова javascript? - PullRequest
9 голосов
/ 19 августа 2010

Является ли функция, которая выполняется после одной другой функции, которая ее вызывает, завершает?

Пожалуйста, я почти ничего не знаю о программировании, и мне довольно сложно найти правильный ответ или объяснение новичка очто это значит.

Могу ли я запросить попытку у гуру stackoverflow?

Ответы [ 7 ]

12 голосов
/ 19 августа 2010

Как правило, функция обратного вызова используется, когда другая функция, которую вы вызвали, завершается (как вы указали в своем вопросе). Хорошим примером этого являются запросы AJAX: большинство библиотек имеют функцию, которая позволяет отправлять запрос на сервер в фоновом режиме, не обновляя страницу (для этого используется AJAX). Обычно вы предоставляете две функции обратного вызова для этой функции AJAX: функцию успеха и функцию отказа.

Если этот запрос выполняется успешно, он вызывает функцию успеха, чтобы ваш код мог делать то, что ему нужно; например, он может обновить часть страницы, сделать какую-то анимацию или предупредить пользователя о том, что его информация была сохранена. С другой стороны, в случае сбоя функция обратного вызова, вероятно, предупредит пользователя о том, что его данные не были сохранены, и что им следует повторить попытку.

Функции обратного вызова позволяют разработчикам библиотек создавать очень общий код, который могут использовать другие, а затем настраивать их под свои нужды.

Ниже приведен код jQuery, демонстрирующий приведенный выше пример (этот код не будет работать, так как URL не существует):

jQuery.ajax(
  url: '/mywebsite/somepage.php',

  success: function itWorked(returnedData) {
    // This is the success function and will be called only if the ajax call
    // completes succesfully

    alert('Yay it worked! ' + returnedData);
  },

  error: function itFailed(originalRequest, textStatus, errorThrown) {
    // This is the error function and will only be called if the ajax call
    // has an error

    alert('It failed! ' + textStatus + '. ' + errorThrown);
  } 
);

РЕДАКТИРОВАТЬ: В начале я сказал: "В общем ...". В действительности, обратные вызовы используются гораздо больше, чем просто после завершения функции. Как указано в других ответах, его можно использовать в любом месте внутри функции: начало, середина, конец. Основная идея заключается в том, что разработчик кода может не знать, как ВЫ собираетесь использовать его код. Таким образом, он делает это очень общим и дает вам возможность делать с данными все, что вам нужно.

Хорошим примером этого является метод jQuery.each , который позволяет передавать обратный вызов, который будет выполняться для каждого из элементов в «массиве» (я говорю «массив», потому что он на самом деле может итерации по многим вещам, которые могут или не могут быть фактическими массивами).

<a href='someurl.html' class='special_link'>Some URL</a>
<a href='anotherurl.html' class='special_link'>Another URL</a>
<a href='onelasturl.html' class='special_link'>One Last URL</a>

// The following code says: execute the myEachCallbackFunction on every link
// that has a class of 'special_link'
$('a.special_link').each(function myEachCallbackFunction(i) {

  // The link variable will contain the object that is currently
  // being iterated over. So, the first time through, it will hold
  // the 'someurl.html' link, the second time it will hold the
  // 'anotherurl.html' link, and the last time it will hold the
  // 'onelasturl.html' link
  var link = $(this);

  // Change the background color of each link to be red
  link.css('background-color', 'red');
});

Итак, из этого примера видно, что разработчики jQuery реализовали метод .each и позволяют нам делать все, что мы хотим, с каждой ссылкой, к которой он вызывается.

7 голосов
/ 16 ноября 2012

Функция обратного вызова - это «ссылка на исполняемый код или фрагмент исполняемого кода, который передается в качестве аргумента другому коду».

Вот хорошая статья, которая поможет понять, что такое функция «обратного вызова».

3 голосов
/ 19 августа 2010

Обратный вызов - это просто указанная вами функция, которая вызывается не сразу, а обычно после некоторого события. Это может быть что-то вроде запроса ajax, вы можете указать обратный вызов, который вызывается только тогда, когда запрос ajax успешно завершен и не выдает ошибку. Другим примером может быть обратный вызов, когда DOM на веб-странице готов или окно загружается.

2 голосов
/ 19 августа 2010

Представьте, что у вас есть какой-то сложный кусок кода, и прямо посреди него вы должны что-то делать.Проблема: вы не представляете, что может быть «что-то», поскольку это зависит от того, как используется код.Обратный вызов для спасения.

Вместо того, чтобы иметь код, вы просто помещаете туда обратный вызов.Пользователь может предоставить свой собственный фрагмент кода, и он будет выполнен в нужное время, чтобы сделать что-то критическое.Пример: jQuery.filter(callback).

jQuery (на который вы должны взглянуть) будет вызывать callback для каждого элемента в списке.Затем функция обратного вызова может проверить элемент и вернуть true, если он соответствует некоторым критериям.

Таким образом, мы получаем лучшее из двух миров: умные люди в jQuery создают фильтр, и вы говорите, что именноискать.

1 голос
/ 19 августа 2010

Функция обратного вызова - это функция, которая автоматически вызывается при завершении другого процесса.Они очень полезны в асинхронном процессе, например, получают страницу.


РЕДАКТИРОВАТЬ

Пример: Вы хотите сделать вызов ajax (получить страницу дляпример).И вы хотите запустить некоторую функцию , когда donwload завершится.

С jquery вы можете использовать это:

$.get('PageIWant.html', myCallBack);

function myCallBack (data){
  alert('I have got the page!');
}
0 голосов
/ 31 июля 2014

Код, подобный этому

var result = db.query('select  * from T'); //use result - Standard function

ваше программное обеспечение ничего не делает, и вы просто ждете ответа от базы данных.это каким-то образом либо блокирует весь процесс, либо предполагает несколько стеков выполнения.Но строка кода, подобная этой

db.query('select * from T',function(result){
    //use result - Callback function
});

, позволяет программе немедленно вернуться в цикл обработки событий.

В этом выполнении сервер выполняет этот запрос и продолжает выполнять другие действиякогда запрос возвращается (после миллионов тактов), вы можете выполнить обратный вызов, все, что вам нужно, это указатель на обратный вызов.

0 голосов
/ 27 февраля 2014

Пытаясь получить более общий и простой пример, я выяснил следующее с аргументами для выполнения вычисления с двумя числами: x и y.

function doMath (x,y,myMath) {return myMath(x,y);}

function mult (a,b){return a*b;}
function sum (a,b){return a+b;}

alert(doMath(2,2,sum))    

где myMath - функция обратного вызова. Я могу заменить его на любую функцию, какую захочу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...