Callback-функции в JavaScript
- Что такое callback-функция
- Функция как значение
- Простой пример callback
- Передача функции без круглых скобок
- Callback с аргументами
- Callback в setTimeout()
- Callback в методах массивов
- Итого
Callback-функция - это функция, которую передают в другую функцию как аргумент.
function sayHello() {
console.log('Привет!');
}
function runCallback(callback) {
callback();
}
runCallback(sayHello);
Результат:
Привет!
Функция sayHello была передана в runCallback(). Внутри runCallback() она вызвалась через параметр callback.
Что такое callback-функция
Слово callback обычно переводят как «обратный вызов».
Идея простая: мы передаем функцию, а другой код решает, когда ее вызвать.
function finishLesson() {
console.log('Урок завершен');
}
function startLesson(callback) {
console.log('Урок начался');
callback();
}
startLesson(finishLesson);
Результат:
Урок начался
Урок завершен
Здесь finishLesson - callback-функция. Она передана в startLesson() и вызвана внутри нее.
Функция как значение
В JavaScript функцию можно записать в переменную, передать в другую функцию или вернуть из функции.
let showMessage = function () {
console.log('Сообщение');
};
showMessage();
Если функцию можно хранить в переменной, значит ее можно передать как обычное значение.
function showMessage() {
console.log('Сообщение');
}
function run(action) {
action();
}
run(showMessage);
Параметр action получил функцию showMessage, а потом вызвал ее.
Простой пример callback
Callback удобно использовать, когда одно действие должно быть настраиваемым.
function calculate(a, b, operation) {
return operation(a, b);
}
function sum(a, b) {
return a + b;
}
function multiply(a, b) {
return a * b;
}
console.log(calculate(4, 5, sum));
console.log(calculate(4, 5, multiply));
Результат:
9
20
Функция calculate() не знает заранее, что именно нужно сделать с числами. Это решает callback-функция.
Передача функции без круглых скобок
Когда мы передаем callback, чаще всего пишем имя функции без круглых скобок.
runCallback(sayHello);
Так мы передаем саму функцию.
Если поставить круглые скобки, функция вызовется сразу.
runCallback(sayHello());
В этом случае в runCallback() попадет не функция, а результат вызова sayHello(). Если функция ничего не возвращает, этим результатом будет undefined.
Callback с аргументами
Callback-функция может принимать аргументы. Их передает та функция, внутри которой callback вызывается.
function repeat(count, callback) {
for (let i = 1; i <= count; i++) {
callback(i);
}
}
function showNumber(number) {
console.log(number);
}
repeat(3, showNumber);
Результат:
1
2
3
Функция repeat() сама вызывает callback и передает в него текущее число.
Callback в setTimeout()
Callback часто встречается в готовых функциях JavaScript. Например, в setTimeout().
function showMessage() {
console.log('Прошла секунда');
}
setTimeout(showMessage, 1000);
Функция showMessage передается в setTimeout() и будет вызвана позже.
Callback не обязательно связан с задержкой или асинхронным кодом, но именно там он часто встречается.
Callback в методах массивов
Многие методы массивов тоже принимают callback. Например, forEach().
let languages = ['HTML', 'CSS', 'JavaScript'];
languages.forEach(function (language) {
console.log(language);
});
Результат:
HTML
CSS
JavaScript
Метод forEach() сам проходит по массиву и вызывает callback для каждого элемента.
То же самое можно записать стрелочной функцией.
languages.forEach((language) => {
console.log(language);
});
Итого
1. Callback-функция - это функция, переданная в другую функцию как аргумент.
2. Обычно callback передают без круглых скобок, чтобы передать саму функцию, а не результат ее вызова.
3. Функция, которая принимает callback, сама решает, когда его вызвать.
4. Callback может принимать аргументы.
5. Callback-функции часто встречаются в setTimeout(), обработчиках событий и методах массивов.