> Как реализовать функцию каррирования с использованием замыканий в JavaScript (JavaScript)
Уровень: senior · Роль: frontend · Категория: Технические вопросы
Компании: циан, Яндекс
Стек: JavaScript
> Пример ответа
Каррирование - это преобразование функции, принимающей несколько аргументов, в последовательность функций, каждая из которых принимает один аргумент. В JavaScript это удобно реализуется через замыкания.
Пример реализации:
JAVASCRIPTfunction 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)); // 6console.log(curriedSum(1, 2)(3)); // 6console.log(curriedSum(1)(2, 3)); // 6
Как это работает:
-
curryпринимает исходную функциюfn. -
Внутренняя функция
curriedпроверяет количество переданных аргументов. -
Если аргументов достаточно (равно
fn.length- числу параметров), вызываетсяfn. -
Если нет - возвращается новая функция, которая через замыкание сохраняет уже переданные аргументы и ждёт остальные.
Ключевая роль замыкания: каждая возвращаемая функция «запоминает» аргументы, переданные ранее, через цепочку замыканий, что позволяет накапливать их до достижения нужного количества.
> Похожие задачи по frontend
Как обрабатываются call stack и очереди в JavaScript
Какие проверки можно применить к массиву в JSON
Как использовать асинхронные функции при переборе элементов, например в reduce
Какие способы оптимизации time to first byte существуют
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью