//定义柯里化函数
function curry(fn) {
//定义一个空数组
var arr = [];
//闭包,返回一个匿名函数
return function () {
//如果参数的长度等于0时(就是不填参数,如下面的fns())
if (arguments.length === 0) {
//返回fn的执行结果到打印fns()中----下面return的结果带到这里
return fn.apply(null, arr);
}
//如果参数的长队不等于0时,将参数以数组的形式添加到空数组中
arr = Array.prototype.concat.apply(arr, arguments);
// var arr1=Array.prototype.slice.call(arguments);//ES5中写法
// var arr1=Array.from(arguments);//Es6中才有的写法
// arr=arr.concat(arr1);与上面注释的第一条合起来与上面的arr=Array....作用相同
}
}
//定义求和的函数
function getSum() {
//返回 将参数带入数组中并且归并
return Array.prototype.reduce.call(arguments, function (sum, item) {
return sum + item;
});
// var arr=Array.from(arguments);
// var sum=arr.reduce(function(sum,item){
// return sum+item;
// });
// return sum; 注释部分等同于上面的return Array.....
}
//定义fns 是 curry中带入getsum
var fns = curry(getSum);
fns(1);
fns(10);
fns(12);
fns(15, 16);
fns(15, 16, 18);
//打印 fns();的执行结果
console.log(fns());//103