sum(1,2,3).sumOf();//6
sum(2,3)(2).sumOf();//7
sum(1,2,3,4).sumOf();//10
sum(2)(4,1)(2).sumOf();//9
此题考查的是函数柯里化
函数柯里化(currying):把接收多个参数的函数变为只接收一个参数的函数,并且返回接受余下参数而且返回结果的新的函数
function sum(){
var args = [].slice.call(arguments);
var fn = function(){
var args_fn = [].slice.call(arguments)
return sum.apply(null, args.concat(args_fn));
}
fn.sumOf = function(){
//reduce() 方法接收一个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为一个值。
//reduce() 可以作为一个高阶函数,用于函数的 compose。
//注意: reduce() 对于空数组是不会执行回调函数的
var sum = args.reduce((a,b)=>a +b);
return sum;
}
reutn fn;
}
sum(1,2,3).sumOf();
sum(2,3)(2).sumOf();
sum(1,2,3,4).sumOf();
sum(2)(4,1)(2).sumOf();