实现函数add
功能要求:
add(1); // 1
add(1)(2); // 3
add(1)(2)(3); // 6
add(1)(2, 3); // 6
add(1, 2)(3); // 6
add(1, 2, 3); // 6
解答:
普通实现:
function add(){ let args = [...arguments]; let addfun = function(){ args.push(...arguments); return addfun; } addfun.toString = function(){ return args.reduce((a,b)=>{ return a + b; }); } return addfun; }
函数柯里化实现:
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);