Создание функции каррирования

Каррирование накапливает по одному аргументу в замыканиях. Когда собрано заданное число аргументов, вызывается исходная функция; до этого возвращается следующая функция.

Короткий ответ

Что ответить на собеседовании

Каррирование накапливает по одному аргументу в замыканиях. Когда собрано заданное число аргументов, вызывается исходная функция; до этого возвращается следующая функция.

Подробный разбор

Ответ с пояснениями

Условие

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

Ответ

Каррирование накапливает по одному аргументу в замыканиях. Когда собрано заданное число аргументов, вызывается исходная функция; до этого возвращается следующая функция.

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.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее