--- sidebar_position: 12 --- # Каррирование (currying) **Каррирование (currying)** в JavaScript — это процесс преобразования функции с несколькими аргументами в последовательность функций, каждая из которых принимает только один аргумент. Каррирование – это трансформация функций таким образом, чтобы они принимали аргументы не как `f(a, b, c)`, а как `f(a)(b)(c)`.\ Каррирование не вызывает функцию. Оно просто трансформирует её.\ Делает код более декларативным и удобным для переиспользования. ## Основная идея: Вместо: ```js function sum(a, b, c) { return a + b + c; } sum(1, 2, 3); // 6 ``` После каррирования: ```js function curriedSum(a) { return function(b) { return function(c) { return a + b + c; }; }; } curriedSum(1)(2)(3); // 6 ``` ## Зачем нужно каррирование? 1. **Частичное применение** — можно фиксировать часть аргументов и получать новую функцию: ```js const addTwo = curriedSum(1)(2); addTwo(3); // 6 addTwo(5); // 8 ``` 2. **Удобство композиции функций** — каррированные функции легче комбинировать. 3. **Чистые функции** — каррирование часто используется в функциональном программировании. ## Автоматическое каррирование (с помощью утилит): Можно написать вспомогательную функцию: ```js function curry(fn) { return function curried(...args) { if (args.length >= fn.length) { return fn.apply(this, args); } else { return function(...args2) { return curried.apply(this, args.concat(args2)); }; } }; } const curriedSum = curry(sum); curriedSum(1)(2)(3); // 6 curriedSum(1, 2)(3); // 6 ``` 🔹 Пример из реального мира (React + Redux): ```js const connect = (mapStateToProps) => (mapDispatchToProps) => (Component) => { // логика подключения компонента console.log(); }); // Использование: connect(mapState)(mapDispatch)(MyComponent); ``` 🚀 **_Источник: DeepSeek_** \ 🚀 **Источник: [https://learn.javascript.ru/currying-partials](https://learn.javascript.ru/currying-partials)**