Задача
Напишите функцию каррирования curry(func), которая накапливает аргументы и вызывает func, когда их количество совпадёт с арностью функции.
Решение
Оптимальное решение
function curry(func) { return function inner(...args) { if (func.length === args.length) { return func(...args); } else { return (...nextArgs) => inner(...args, ...nextArgs); } }; }
Альтернативное решение (с сохранением this)
function curry(func) { return function curried(...args) { if (args.length >= func.length) { return func.call(this, ...args); } else { return function (...nextArgs) { return curried.call(this, ...args, ...nextArgs); }; } }; }