柯里化

启事:
有一道题:

完成一个函数sum ,运算效果能够满足以下预期
sum(1,2,3).valueOf()  //6
sum(2,3)(2).valueOf() //7
sum(1)(2)(3)(4).valueOf()  //10
sum(1)(4,1)(2).valueOf()  //9

明眼一看就晓得是把一切的参数相加,每次返回该函数,不停挪用。
怎样完成呢?请看:

function sum(){
    var args = [].slice.call(arguments);
    var fn = function() {
        var newArgs = args.concat([].slice.call(arguments));
        return sum.apply(null,newArgs);
    }
    fn.valueOf = function() {
        return args.reduce(function(a, b) {
            return a + b;
        })
    }
    return fn;
}  

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

sum(2,3)(2).valueOf(); //7

sum(1)(2)(3)(4).valueOf();  //10

sum(1)(4,1)(2).valueOf();  //9  

柯里化

    原文作者:3_hours
    原文地址: https://segmentfault.com/a/1190000018339826
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞