函数柯里话实现累加
// 方法一
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));
}
}