实现add(1,2,3),add(1)(2,3),add(1)(2)(3)
这里涉及的主要是柯里化。
const curry = (fn, ...args) => { //fn就是addCurry,fn.length就是3对应x,y,z //args.length就是add传入的参数长度,第一次是add(1),即1 // 1<3所以继续柯里化,传入(2,3)此时args为(1,2,3)直接执行fn,即(addCurry(1,2,3)) return args.length >= fn.length ? fn(...args) : (..._args) => curry(fn, ...args, ..._args); } function addCurry(x, y, z) { return x + y + z; } const add = curry(addCurry); console.log(add(1)(2, 3)); //6