// 方法一
function Sum () {
// 用一个数组来存储所有的参数
let args = [].slice.call(arguments);
// 定义一个函数 利用闭包的特性来收集所有的参数值
let fn = function() {
let fn_args = [].slice.call(arguments);
return Sum.apply(null,args.concat(fn_args));
}
// 利用函数的隐式转换 重新定义toString 方法 内部使用reduce 累加后返回最终数据
fn.toString = function() {
return args.reduce((acc,next)=>{
return acc + next;
})
}
return fn
}
// test
Sum(1)(2,3) // 6
Sum(1,2,3) // 6
// 函数柯里化
function currying(fn){
let slice = Array.prototype.slice;
let _args = slice.call(arguments,1)
return function() {
let _inargs = slice.call(arguments);
return fn.apply(null,_args.concat(_inargs));
}
}