Callback

Коротко

Функция, которую передают в другой код как аргумент, чтобы тот вызвал её позже — по событию, после завершения операции или для каждого элемента данных.

Что такое «Callback»

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

Колбэки встречаются в двух ситуациях. Первая — синхронная: функция сортировки или обхода массива вызывает переданную функцию для каждого элемента. Вторая — асинхронная: результат появится позже, например когда придёт ответ сервера или пользователь нажмёт кнопку.

Пример на PHP и в WordPress

// Сортировка товаров по цене: колбэк сравнивает два элемента
usort($products, fn($a, $b) => $a['price'] <=> $b['price']);

// WordPress вызовет функцию, когда дойдёт до события wp_footer
add_action('wp_footer', function () {
    echo '<!-- footer loaded -->';
});

Вся система хуков WordPress построена на колбэках: add_action и add_filter лишь запоминают функцию, а вызывает её ядро. Подробнее о механизме — в статье про хуки WordPress. В PHP колбэком может быть имя функции строкой, анонимная функция или массив из объекта и имени метода.

В JavaScript

В браузере колбэки повсюду: addEventListener('click', handler), setTimeout(fn, 1000), методы массивов map и filter. Функция, которая принимает другую функцию, называется функцией высшего порядка.

«Ад колбэков» и что с ним делают

Когда асинхронные шаги идут друг за другом, колбэки вкладываются один в другой: загрузить пользователя, затем его заказы, затем статус доставки. Код уходит вправо лесенкой, а обработку ошибок приходится повторять на каждом уровне. Эту проблему решили промисы и синтаксис async/await: тот же сценарий записывается плоско, сверху вниз, с одним блоком try/catch. Колбэки при этом не исчезли — они остались основой обработчиков событий и функциональных методов.

Обновлено:

Все термины раздела «Backend»

Что будем искать? Например,Продвижение