Выполнение внешней функции противИспользование функции обратного вызова - когда использовать один или другой? - PullRequest
0 голосов
/ 19 октября 2019

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

Кажется, что мы можем сделать то же самое, просто вызвав внешнюю функцию из другой выполняемой функции.

Следующее лучше иллюстрирует то, что я пытаюсь сказать.

// ************************ Использованиеобратный вызов ************************************************

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 выполняется в своем собственном локальном контексте выполнения.

Возможно, этот пример слишком прост, чтобы увидеть, что между двумяэто помогло бы мне понять, когда я буду использовать один над другим.

1 Ответ

1 голос
/ 19 октября 2019

Представьте, что B иногда передавалось A, но в других случаях передавалась функция с именем C. Если B вызывает функцию напрямую, она может вызывать только эту функцию. Но если ему передана функция для вызова, она может вызвать любую функцию, которую ей передали:

function A() {
    return 'hello';
};

function C() {
    return 'Привет';
};

function B(callback) {
    var output = callback();

    console.log(output);
    console.log("goodbye")
};

B(A);
// => 'hello'
// => 'goodbye'
B(C);
// => 'Привет'
// => 'goodbye'

Вы не можете сделать это без обратного вызова.

Действительно, именно поэтому аргументымощный в целом. Передача различных аргументов функции позволяет коду быть динамическим, как это невозможно без них (или эквивалентного механизма).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...