柯里化 add(1)(2)(3)
2021-03-16 本文已影响0人
McDu
function add() {
const args = [...arguments];
const fn = function() {
const args2 = args.concat(...arguments);
return add.apply(null, args2);
}
fn.valueOf = function() {
return args.reduce((a, b) => a + b);
}
return fn;
}
const currying = (fn, ...args) => {
if(args.length >= fn.length) {
return fn(...args);
} else {
return (...args2) => {
return currying(fn, ...args, ...args2);
}
}
}
const adding = (...args) => args.reduce((pre, cur) => pre + cur, 0);
//参数不确定
const currying = (fn) => {
let args = [];
return function temp(...newArgs) {
if (newArgs.length) {
args.push(...newArgs);
return temp;
} else {
const val = fn.apply(this, args);
args = [];
return val;
}
};
};
var myAdd = currying(adding)
myAdd(1)(2)() // 3