Каррированная функция принимает callback и числа по одному: apply(callback)(a)(b). Последний вызов возвращает callback(a, b).
Функция высшего порядка через каррирование
Каррированная функция принимает callback и числа по одному: apply(callback)(a)(b). Последний вызов возвращает callback(a, b).
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Напишите функцию, реализующую каррирование, которая принимает три аргумента: функцию‑колбэк и два числовых значения, а затем возвращает результат вызова переданной функции‑колбэк с этими двумя числами в качестве входных параметров.
Ответ
Каррированная функция принимает callback и числа по одному: apply(callback)(a)(b). Последний вызов возвращает callback(a, b).
const apply = callback => a => b => callback(a, b);
const sum = (a, b) => a + b;
apply(sum)(2)(3); // 5
const double = apply((a, b) => a * b)(2);
double(7); // 14
Каждая промежуточная функция замыкает уже переданные аргументы. Обычная функция вида apply(callback, a, b) тоже может вызвать callback, но это не каррирование. Если необходим именно такой интерфейс, его можно сделать обёрткой над приведённым вариантом.