function multi() {
var args = Array.prototype.slice.call(arguments);
var fn = function(...arg) {
return multi.apply(null,arg.concat(args));
}
fn.toString = function() {
return args.reduce(function(a, b) {
return a * b;
},1)
}
return fn;
}
console.log(multi(2)(3)(4));
console.log(multi(2,3,4));
console.log(multi(2)(3,4));
console.log(multi(2,3)(4));
设定处理函数的函数柯里化
function curry(hanldeFn) {
var fnCall = function(){
var args = Array.prototype.slice.call(arguments);
var fn = function() {
var newArgs = args.concat(Array.prototype.slice.call(arguments));
return fnCall.apply(null, newArgs);
}
fn.toString = function() {
return hanldeFn(...args)
}
return fn;
}
return fnCall;
}
function multiFn(...args) {
return args.reduce(function(a, b) {
return a * b;
},1);
}
var multi = curry(multiFn);
console.log(multi(2)(3)(4));
console.log(multi(2,3,4));
console.log(multi(2)(3,4));
console.log(multi(2,3)(4));