柯里化

 一、柯里化

柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。

例如:

//柯里化前
function add(a, b) {
    return a + b;
} 
add(10, 2) // 12

//柯里化后
var add = function(a) {
    return function(b) {
        return a + b;
    };
};
var addTen = add(10);
addTen(2); // 12

二、利用柯里化实现累加器

function fn(){
    var numList = [].slice.call(arguments);
    var _fn = function(){
        var innerArguments = [].slice.call(arguments);
        numList = numList.concat(innerArguments);
        
        return _fn;
    }
    _fn.valueOf = function(){
        return numList.reduce(function(num1, num2){
            return num1 + num2;
        });
    }
    return _fn;
}
console.log(fn(1)(2)(3));

 这段代码初看可能不太好理解,这里我们将它拆分一下,其中涉及的知识点有:

valueOf() 方法

返回 Boolean 对象的原始值:

<script type="text/javascript">
    var boo = new Boolean(false);
    document.write(boo.valueOf()); //false
</script>

arguments对象

MDN,介绍的特别详细。

arguments 是一个对应于传递给函数的参数的类数组对象。可以用下面的语句将arguments转化成数组对象:

var numList = [].slice.call(arguments);

reduce()方法

接收一个函数作为累加器。语法:

array.reduce(function(total, currentValue, currentIndex, arr), initialValue)

使用范例:

var numbers = [65, 44, 12, 4];
function getSum(total, num) {
    return total + num;
}
function myFunction(item) {
    document.getElementById("demo").innerHTML = numbers.reduce(getSum);
}

递归

 可以看我的另一篇博客:递归

参考:

1、SegmentFault

2、柯里化实现累加器

猜你喜欢

转载自www.cnblogs.com/PeriHe/p/8856843.html
今日推荐