Open fedono opened 4 years ago
const curry = fn => { const len = fn.length; return function curried(...args) { if (args.length === len) { return fn.apply(null, args); } return (..._args) => { return curried.apply(null, [...args, ..._args]); }; }; }; const sum = (x, y, z) => x + y + z; const add = curry(sum); // 6 add(1, 2, 3); // 6 add(1,2)(3); // 6 add(1)(2,3); // 6 add(1)(2)(3);
思路确实很好
const len = fn.length;
args.length === len
(1, 2, 3)
(1,2)(3);
(1)(2,3);
(1)(2)(3);
return
curried
apply
更多参考 Advanced-Frontend/Daily-Interview-Question#134
思路确实很好
const len = fn.length;
计算函数的正常需要多少个参数args.length === len
也就是按照正常的传参(1, 2, 3)
(1,2)(3);
或者(1)(2,3);
或者(1)(2)(3);
这种传参方式return
一个函数,内部继续调用curried
来计算参数的个数,使用apply
第二个参数是个数组,把所有的参数都汇总成成单个数组,args.length === len
的时候,就是按照正常的传参来计算了