Каррирование накапливает по одному аргументу в замыканиях. Когда собрано заданное число аргументов, вызывается исходная функция; до этого возвращается следующая функция.
Создание функции каррирования
Каррирование накапливает по одному аргументу в замыканиях. Когда собрано заданное число аргументов, вызывается исходная функция; до этого возвращается следующая функция.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Функция, преобразующая обычную функцию, принимающую несколько параметров, в цепочку вызовов, где каждый вызов передаёт один аргумент, пока не будет получен полный набор аргументов.
Ответ
Каррирование накапливает по одному аргументу в замыканиях. Когда собрано заданное число аргументов, вызывается исходная функция; до этого возвращается следующая функция.
function curry(fn, arity = fn.length) {
if (!Number.isInteger(arity) || arity < 1) throw new RangeError('Нужна положительная арность');
const collect = args => value => {
const next = [...args, value];
return next.length === arity ? fn(...next) : collect(next);
};
return collect([]);
}
const sum = curry((a, b, c) => a + b + c);
console.log(sum(1)(2)(3)); // 6
Каждый вызов принимает ровно один аргумент. Для функций с default/rest-параметрами задавайте arity явно: fn.length не всегда соответствует нужному числу значений. Этот вариант предназначен для обычных функций без зависимости от this.