码迷,mamicode.com
首页 > 其他好文 > 详细

柯里化

时间:2018-04-17 11:40:41      阅读:205      评论:0      收藏:0      [点我收藏+]

标签:dex   develop   list   理解   class   函数   www   代码   type   

 一、柯里化

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

例如:

//柯里化前
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、柯里化实现累加器

 

柯里化

标签:dex   develop   list   理解   class   函数   www   代码   type   

原文地址:https://www.cnblogs.com/PeriHe/p/8856843.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!