Реализуйте декоратор (curry) для каррирования функции с фиксированным числом аргументов: он должен позволять вызывать функцию с частичным набором аргументов до тех пор, пока не будет передано необходимое количество аргументов.

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

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

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

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

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

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

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

В этом варианте this берётся из первого вызова, лишние аргументы отбрасываются:

function curry(fn, arity = fn.length) {
  if (!Number.isInteger(arity) || arity < 0) throw new RangeError('arity');
  return function (...args) {
    const context = this;
    function collect(values) {
      if (values.length >= arity) return fn.apply(context, values.slice(0, arity));
      return (...more) => collect([...values, ...more]);
    }
    return collect(args);
  };
}
const add = curry((a, b, c) => a + b + c);
add(1)(2, 3); // 6

Для функций с default/rest-параметрами fn.length может не отражать нужную арность; передайте её явно.

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

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

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

Подробнее