← Назад к вопросам
Что такое каррирование в JS?
2.2 Middle🔥 101 комментариев
#Node.js и JavaScript#Алгоритмы и структуры данных
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI30 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Currying в JavaScript
Определение
Каррирование это преобразование функции с несколькими параметрами в цепь функций с одним параметром каждая. Названо в честь логика Хаскелла Карри.
Пример
// Обычная функция
const add = (a, b) => a + b;
add(2, 3); // 5
// Каррированная
const curriedAdd = (a) => (b) => a + b;
curriedAdd(2)(3); // 5
// Или пошагово
const add2 = curriedAdd(2);
add2(3); // 5
Три параметра
const multiply = (a) => (b) => (c) => a * b * c;
multiply(2)(3)(4); // 24
Автоматическое каррирование
function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn(...args);
}
return (...more) => curried(...args, ...more);
};
}
Практический пример
const filterBy = (field) => (value) => (array) => {
return array.filter(item => item[field] === value);
};
const users = [{role: 'admin'}, {role: 'user'}];
const getAdmins = filterBy('role')('admin');
getAdmins(users); // [{ role: 'admin' }]
Middleware
const authorize = (role) => (handler) => (req, res) => {
if (req.user.role !== role) {
return res.status(403).send('Forbidden');
}
handler(req, res);
};
app.delete('/users/:id', authorize('admin')(deleteHandler));
Преимущества
Реиспользование: создаёшь специальные функции. Композиция: легче комбинировать функции. Lazy evaluation: функция выполняется когда получены все аргументы.
Недостатки
Сложнее читать. Производительность немного хуже. Debugging затруднён.