函数柯里化

函数柯里化的含义

柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新
函数的技术

书上的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
var currying = function (fn) {
var args = Array.prototype.slice.call(arguments , 1); // 获取固定参数时的除fn 以外的所有参数(我们可以认为是默认参数,参数的类型可以是函数,对象,数字,字符 Json等等)

return function () {
// 返回的函数再进行调用的时候,获取全部参数(变化参数)
// 将default默认的参数和变化参数合并
var fArgs = args.concat( Array.prototype.slice.call( arguments ) );

// 执行被柯里化的函数,并将合并好的参数丢给该函数
fn.apply( null , fArgs );
}
}
`

实现一个例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function sum(){
var args1 = Array.prototype.slice.call(arguments);
function fn(){
var args2 = Array.prototype.slice.call(arguments);
return sum.apply(null,args.concat(args1));
}
fn.valueOf = function(){
return args1.reduce(function(){
return a+b;
})
}
return fn;
}

console.log(sum(1,2,3).valueOf());//6
console.log(sum(2,3)(2).valueOf());//7