JavaScript一个有趣的特征是函数可以作为参数和返回值,在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。
- 说白了,就是柯里化时先传进一部分参数,然后返回调整后的函数。
- 直接上代码,看看柯里化到底干了什么
function curry(fn){
let args = Array.prototype.slice.call(arguments,1);
return function(){
let innerArgs = Array.prototype.slice.call(arguments);
let finallArgs = args.concat(innerArgs);
return fn.apply(null,finallArgs);
};
}
function sum(a,b,c){
return a + b + c;
}
curry(sum,1);
- 调用curry(sum,1)发生了什么?
function sum(1,b,c){
return 1 + b + c;
}
- 同理,我们可以推出curry(sum,1,2)的结果
function sum(1,2,c){
return 1 + 2 + c;
}
- 调用上面两个新函数
console.log(curry(sum,1)(2,3));// 6
console.log(curry(sum,1,2)(3));// 6
总结:柯里化是一个部分求值的过程。
function curry(fn,...args1){
return (...args2)=>{
return fn.apply(null,[...args1,...args2]);
}
}