缘由:
有一道题:

实现一个函数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
82 声望1 粉丝

下一篇 »
vue