Обратные вызовы, как говорят, добавляют функциональность функциям более высокого порядка, передавая значение функции обратного вызова (ее определение функции) - параметру функции «высшего порядка», в которой она передается и выполняется.
Кажется, что мы можем сделать то же самое, просто вызвав внешнюю функцию из другой выполняемой функции.
Следующее лучше иллюстрирует то, что я пытаюсь сказать.
// ************************ Использованиеобратный вызов ************************************************
function A() { // this is the callback function
return 'hello';
};
function B(callback) { // this is considered a 'higher-order' function because it takes a
// function definition as a parameter. the function definition of A
// -- taken from A in Global memory -- is assigned to callback
var output = callback(); // we call callback and run it
// the value of callback, is assigned to the variable output
console.log(output);
console.log("goodbye")
};
B(A); // logs 'hello' 'goodbye'
// ******* сравните вышесказанное с вызовом внешней функции из другой функции *****
function A() {
return 'hello';
};
function B() {
var output = A(); // we call function A, from inside function B,
// the value returned by A, is assigned to a variable inside B
console.log(output);
console.log("goodbye")
};
B(); // logs 'hello' 'goodbye'
Хотя нет разницы между2 с точки зрения значений, которые они возвращают, есть различия в том, как они выполняются.
Функция обратного вызова принимает определение функции A и присоединяет его к новому имени, называемому обратным вызовом. Обратный вызов выполняется и выполняется в локальном контексте выполнения обратного вызова.
Сравните это с тем, что происходит, когда мы вызываем A изнутри B, A выполняется в своем собственном локальном контексте выполнения.
Возможно, этот пример слишком прост, чтобы увидеть, что между двумяэто помогло бы мне понять, когда я буду использовать один над другим.