Передайте функцию в качестве параметра в другую функцию. Эта функция называется функцией обратного вызова
В этой ситуации часто встречается, что слои A и B проекта завершаются различным персоналом в сотрудничестве. Уровень A отвечает за функцию Funa, а уровень B отвечает за FUNCB. Когда B -Layer хочет использовать данные определенного модуля, он сказал персоналу A Layer, что мне нужно, чтобы вы предоставили данные, которые отвечают определенным потребностям, и вы предоставляете мне интерфейс.
Сотрудники на уровне A сказали: я предоставлю вам данные и как отображать и обрабатывать это бизнес B.
Конечно, уровень B не может предоставить интерфейс данных для каждого требования. B обеспечивает интерфейс для прохода. B получает данные, а затем B записывает функцию, чтобы отобразить их.
То есть вам нужно работать с другими, а другие предоставляют данные, и вам не нужно сосредоточиться на том, как другие получают или создают данные. Вам просто нужно работать на полученных данных. Вам нужно использовать функцию обратного вызова в настоящее время
Следовательно, обратные вызовы - это по сути шаблон дизайна, и принципы дизайна jQuery (включая другие рамки) следуют этому шаблону.
Примером использования обратных вызовов в синхронизации (блокировку) является выполнение Func2 после выполнения кода Func1.
Кода -копия выглядит следующим образом:
var func1 = function (обратный вызов) {
// что -нибудь делай.
(Callback && typeof (обратный вызов) === "function") && callback ();
}
func1 (func2);
var func2 = function () {
}
Пример асинхронных обратных вызовов:
Кода -копия выглядит следующим образом:
$ (document) .ready (обратный вызов);
$ .ajax ({
URL: "test.html",
Контекст: Document.body
}). DOD (function () {
$ (this) .AdDClass ("DODE");
}). fail (function () {
Alert ("ошибка");
}). Always (function () {
оповещение («полное»);
});
Обратите внимание, что запрос Ajax действительно асинхронно, но этот запрос запрашивается браузером. Когда статус запроса изменяется, если обратный вызов был установлен ранее, асинхронная поток будет генерировать событие изменения состояния и поместить его в очередь обработки двигателя JavaScript, чтобы дождаться обработки. См.: Http://www.phpv.net/html/1700.html
Когда будет выполнен обратный вызов
Функции обратного вызова обычно выполняются последними в синхронной ситуации, но не могут выполняться в асинхронной ситуации, поскольку событие не запускается или условия не выполняются.
Примеры использования функций обратного вызова
Загрузка ресурса: выполнить обратный вызов после динамической загрузки файлов JS, выполнить обратный вызов после загрузки iframe, выполнить обратный вызов после загрузки обратного вызова AJAX, выполнить обратный вызов после загрузки изображения, AJAX и т. Д.
События DOM и события Node.js основаны на механизме обратного вызова (обратные вызовы node.js могут иметь многослойные задачи гнездования обратного вызова).
Время задержки установки составляет 0. Этот взлом часто используется. Функция, вызванная SetTimeout, на самом деле является осуществлением обратного вызова
Цепный вызов: при цепном вызове легко реализовать цепный вызов в методе оценщика (SETTER) (или методами, которые не возвращают значения), но получение значения относительно трудно реализовать цепный вызов, поскольку вам нужен полученчик для возврата данных, которые вам нужны вместо этого указателя. Если вы хотите реализовать метод цепочки, вы можете использовать функцию обратного вызова для его реализации.
Вызовы функций SetTimeout и SetInterval получают их возвратное значение. Поскольку обе функции являются асинхронными, то есть время их вызовов и основной процесс программы относительно независимы, нет способа ждать их возвратной стоимости в теле, и программа не остановится и не будет ждать, когда они будут открыты, в противном случае значение SetTimeout и SetInterval будет потеряно. Следовательно, бессмысленно использовать возврат, поэтому можно использовать только обратный вызов. Значение обратного вызова заключается в том, чтобы уведомить функцию прокси о результатах выполнения таймера для своевременной обработки.
Я должен получить некоторую информацию, собранную онлайн, и я должен ее понять. Я сам разберусь:
Кода -копия выглядит следующим образом:
Функция Fun (num, обратный вызов) {
if (num <0) {
Alert («Вызовите функцию уровня A, чтобы обрабатывать!»);
Alert («Данные не могут быть отрицательными, ошибка ввода!»);
} else if (num == 0) {
Alert («Вызовите функцию уровня A, чтобы обрабатывать!»);
Alert («Этот элемент данных не существует!»);
}еще{
Alert («Call B-функции B-уровня для обработки!»);
обратный вызов (1);
}
}
функциональный тест () {
var num = document.getElementById ("Оценка"). Значение;
Fun (num, function (назад) {// Функция обработки анонимной B-слой
оповещение (":"+назад);
if (num <2)
оповещение ("номер 1");
иначе if (num <= 3)
оповещение («номер 2 или 3!»);
еще
оповещение («число больше 3!»);
})
}
Когда функция начинает выполнять веселье, сначала перейдите, чтобы определить, является ли NUM отрицательным числом или нулю, в противном случае выполните оповещение функции обработки B-слой (":"+назад); Выход 1 и определите его как <2, <= 3,> 3 и т. Д.
Опыт советов:
Лучше всего убедиться, что обратный вызов существует и должен быть ссылкой на функцию или выражение функции:
Кода -копия выглядит следующим образом:
(Callback && typeof (обратный вызов) === "function") && callback ();
Кода -копия выглядит следующим образом:
var obj = {
init: function (обратный вызов) {
// Тодо ...
if (callback && typeof (callback) === "function") && callback ()) {
обратный вызов ('init ...'); // обратный вызов
}
}
Наконец, о том, почему вам нужно использовать функцию обратного вызова? Следующая метафора очень яркая и интересная.
Если вам есть чем заняться, перейдите в следующее общежитие, чтобы найти одноклассника, и обнаружите, что этого человека нет, что вы должны делать?
Метод 1: Перейдите в следующее общежитие каждые несколько минут, чтобы увидеть, есть ли человек
Метод 2: Позвоните с ним в одном общежитии и позвоните вам, когда вы видите, что он возвращается
Первый - опрос, а последний - обратный вызов.
Тогда вы говорите, могу ли я подождать прямо в общежитии по соседству, пока мои одноклассники не вернутся?
Да, но таким образом, вы могли бы сэкономить время, чтобы сделать другие вещи, но теперь вы должны тратить его на ожидание. Превратите оригинальный неблокирующий асинхронный вызов в блокирующий синхронный вызов.
Образцы JavaScript используются в асинхронных сценариях вызовов, а производительность использования обратных вызовов лучше, чем опросы.