newbie approach: what is a javascript callback function?

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?

9
задан Matt Ball 11 February 2015 в 17:18
поделиться

4 ответа

Как правило, функция обратного вызова используется после завершения другой функции, которую вы вызвали (точно так же, как вы указали в своем вопросе).Хорошим примером этого являются запросы 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 и позволяют нам делать все, что мы хотим, с каждой ссылкой, по которой он вызывается.

12
ответ дан 4 December 2019 в 08:31
поделиться

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

3
ответ дан 4 December 2019 в 08:31
поделиться

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

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

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

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

2
ответ дан 4 December 2019 в 08:31
поделиться

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


EDIT

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

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

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

function myCallBack (data){
  alert('I have got the page!');
}
1
ответ дан 4 December 2019 в 08:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: