«В компьютерном программировании обратный вызов, также известный как функция обратного вызова, - это любой исполняемый код, который передается в качестве аргумента. на другой код; ожидается, что другой код обратный вызов (выполнит) аргумент в заданное время. Это выполнение может быть немедленным, как при синхронном обратном вызове, или может произойти позже, как при асинхронном обратном вызове. Языки программирования поддерживают обратные вызовы по-разному, часто реализуя их с помощью подпрограмм, лямбда-выражений, блоков или указателей на функции ». википедия

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

Функции - это объекты:

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

Функции обратного вызова

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

Примеры:

Пример 1: createWelcome - это функция высшего порядка, которая принимает два аргумента, второй из которых является обратным вызовом. Функция logWelcomee используется для передачи в качестве нашей функции обратного вызова. Когда мы выполняем createWelcome функцию (1), обратите внимание, что мы не добавляем скобки к logQuote, когда передаем его в качестве аргумента. Это связано с тем, что мы не хотим сразу выполнять нашу функцию обратного вызова, мы просто хотим передать определение функции функции высшего порядка, чтобы ее можно было выполнить позже.

Кроме того, нам необходимо убедиться, что если переданная функция обратного вызова ожидает аргументы, мы предоставляем эти аргументы при выполнении обратного вызова (2). В приведенном выше примере это будет оператор callback(myMsg);, поскольку мы знаем, что logWelcome ожидает передачи цитаты. Другой пример в MDN: https://developer.mozilla.org/en-US/docs/Glossary/Callback_function

Зачем использовать обратные вызовы?

Большую часть времени мы создаем программы и приложения, которые работают синхронно. Другими словами, некоторые из наших операций запускаются только после завершения предыдущих. Часто, когда мы запрашиваем данные из других источников, таких как внешний API, мы не всегда знаем, когда наши данные будут возвращены. В этих случаях мы хотим дождаться ответа, но не всегда хотим, чтобы все наше приложение останавливалось на время получения данных. В таких ситуациях функции обратного вызова могут пригодиться.