> Как реализовать функцию каррирования с использованием замыканий в JavaScript (JavaScript)

Уровень: senior · Роль: frontend · Категория: Технические вопросы

Компании: циан, Яндекс

Стек: JavaScript

> Пример ответа

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

Пример реализации:

JAVASCRIPT
function curry(fn) {
return function curried(...args) {
// Если передано достаточно аргументов, вызываем исходную функцию
if (args.length >= fn.length) {
return fn.apply(this, args);
} else {
// Иначе возвращаем новую функцию, которая запоминает переданные аргументы
return function(...nextArgs) {
return curried.apply(this, args.concat(nextArgs));
};
}
};
}
// Пример использования:
function sum(a, b, c) {
return a + b + c;
}
const curriedSum = curry(sum);
console.log(curriedSum(1)(2)(3)); // 6
console.log(curriedSum(1, 2)(3)); // 6
console.log(curriedSum(1)(2, 3)); // 6

Как это работает:

  1. curry принимает исходную функцию fn.

  2. Внутренняя функция curried проверяет количество переданных аргументов.

  3. Если аргументов достаточно (равно fn.length - числу параметров), вызывается fn.

  4. Если нет - возвращается новая функция, которая через замыкание сохраняет уже переданные аргументы и ждёт остальные.

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

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью