函数柯里化

在计算机科学中,柯里化(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

你可能感兴趣的:(函数柯里化)