Is just a function that executes after one other function that calls it, finishes?
Please I know (almost) nothing about programming, and I find it quite hard to find a proper newbie answer or explanation about what does this means.
Can I request a try from stackoverflow gurus?
Как правило, функция обратного вызова используется после завершения другой функции, которую вы вызвали (точно так же, как вы указали в своем вопросе).Хорошим примером этого являются запросы 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.каждый метод, который позволяет вам передать обратный вызов, который будет выполняться для каждого из элементов в «массиве» (я говорю «массив», потому что он может фактически выполнять итерацию по многим вещам, которые могут быть, а могут и не быть фактическими массивами).
<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 и позволяют нам делать все, что мы хотим, с каждой ссылкой, по которой он вызывается.
Обратный вызов - это просто указанная вами функция, которая вызывается не сразу, а обычно после некоторого события. Это может быть что-то вроде запроса ajax, вы должны указать обратный вызов, который вызывается только тогда, когда запрос ajax успешно завершен и не вызывает ошибки. Другим примером может быть обратный вызов, когда DOM на веб-странице готов или окно загружается.
Представьте, что у вас есть сложный фрагмент кода, и прямо в его середине вы должны «что-то сделать». Проблема: вы не представляете, что «что-то» может быть, поскольку это зависит от того, как используется код. Обратный вызов в помощь.
Вместо кода вы просто помещаете туда обратный вызов. Пользователь может предоставить свой собственный фрагмент кода, и он будет выполнен в нужный момент, чтобы сделать что-то важное. Пример: jQuery.filter (обратный вызов)
.
jQuery (на который следует обратить внимание) будет вызывать обратный вызов
для каждого элемента в списке. Затем функция обратного вызова может проверить элемент и вернуть true
, если он соответствует некоторым критериям.
Таким образом, у нас есть лучшее из двух миров: умные люди из jQuery создают фильтр, а вы говорите, что именно нужно искать.
Функция обратного вызова - это функция, которая автоматически вызывается при завершении другого процесса. Они очень полезны в асинхронных процессах, таких как получение страницы.
EDIT
Example: Вы хотите сделать ajax-вызов (например, получить страницу). И вы хотите запустить некоторую функцию когда donwload закончится.
С jquery вы можете использовать это:
$.get('PageIWant.html', myCallBack);
function myCallBack (data){
alert('I have got the page!');
}