Обратный вызов - это функция , которая передается другой функции в качестве аргумента и вызывается из нее для продолжения программы.Вам не хватает этой функции обратного вызова в вашем коде.Это простой бит.
Теперь, это предложение из вашего вопроса требует немного больше работы:
функция, которая принимает два числа и имеет обратный вызов, который возвращает последний элемент
Это, безусловно, хорошо для случаев, таких как ваш пример, где нет вовлеченных асинхронных процессов ...
const items = ['Pencil', 'Notebook', 'yo-yo', 'Gum'];
function last(arr, cb) {
const el = arr[arr.length - 1];
return cb(el);
}
const lastItem = last(items, function print(el) {
return `Last element is ${el}`;
});
console.log(lastItem);
... но обычно вы увидите, что обратные вызовы в основном используются для продолжения потока кода после запуска асинхронного процесса, и выне может вернуть значения из обратного вызова в этой ситуации.
Например, в этом примере мы используем setTimeout
для задержки обратного вызова на 2 с:
const items = ['Pencil', 'Notebook', 'yo-yo', 'Gum'];
function last(arr, cb) {
const el = arr[arr.length - 1];
setTimeout(() => {
cb(el);
}, 2000);
}
last(items, function print(el) {
console.log(`Last element is ${el}`);
});
Мы ничего не возвращаем, потому что возвращение setTimeout
не имеет смысла, равно как и обратный вызов из в * setTimeout
.Вместо этого мы вызываем обратный вызов со значением после 2 с, и строка записывается в консоль.
Это означает, что мы не можем вернуть значение переменной, как мы это сделали с lastItem
в первом примере,и причина, по которой «Как я могу вернуть ответ от асинхронного вызова» , вероятно, является наиболее связанным вопросом на этом сайте, и было важно, чтобы вы поняли это для вашего понимания обратных вызовов.
Итак, хотя вы можете возвращать значения из обратных вызовов, они обычно используются для продолжения выполнения программы после асинхронного процесса.
Надеюсь, что это поможет.