加法中的函数科里化

159 阅读1分钟

记录每次调用传入的参数,并且和函数的参数个数比较,如果传入参数个数和函数参数个数相等,则执行函数,否则继续返回新的函数。 length 是函数对象的一个属性值,指该函数有多少个必须要传入的参数,那些已定义了默认值的参数不算在内

function sum(a, b, c, d) { return a + b + c + d; }

function curry(fn) { const inner = (args = []) => { return args.length >= fn.length ? fn(...args) : (...userArgs) => { return inner([...args, ...userArgs]); }; }; return inner(); }

console.log(curry(sum)(1)(2)(3)(4));