美文网首页
函数柯里化

函数柯里化

作者: RQrry | 来源:发表于2019-07-17 10:49 被阅读0次

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

    相关文章

      网友评论

          本文标题:函数柯里化

          本文链接:https://www.haomeiwen.com/subject/zxxflctx.html