函数柯里化
2019-07-17 本文已影响0人
RQrry
在计算机科学中,柯里化(Currying)是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数且返回结果的新函数的技术。
实现 sum(2)(3) === sum(2, 3)
function add(a, b) {
if(b) {
return a + b;
} else {
return function(c) {
return a + c;
}
}
}
console.log(add(2,3)); // 5
console.log(add(2)(3)); // 5
实现 sum(1)(2)(3)===sum(1, 2, 3)
function sum(a) {
return function (b) {
return function (c) {
return a+b+c;
}
}
}
console.log(sum(1)(2)(3)); // 6
若要实现更加复杂的函数 如 sum(1)(2)(3)(4)(5)
,sum(1,2,3)(4)(5)
等
将函数进行柯里化
function curry(fn, args=[]) {
return function () {
let rest = [...args, ...arguments];
if (rest.length < fn.length) {
return curry.call(this, fn, rest);
} else {
return fn.apply(this, rest)
}
}
}
function sum(a, b, c, d, e) {
return a+b+c+d+e;
}
var currySum = curry(sum);
console.log(currySum(1)(2)(3)(4)(5)); // 15
console.log(currySum(1,2)(3,4)(5)); // 15
console.log(currySum(1,2,3)(4)(5)); // 15