function curry(fn, len=fn.length) { return _curry(fn, len); } function _curry(fn, len, ...args1) { return (...args2) => { const newArgs = [...args1, ...args2]; if (newArgs.length < len) { return _curry(fn, len, ...newArgs); } return fn.call(null, ...newArgs); } } function add(a, b, c, d) { return a + b + c + d; } const currayAdd = curry(add); console.log(currayAdd(1)(2, 3, 4))