柯里化手写实现

一.什么是柯里化函数?

第一次看到柯里化这个词,是不是觉得特别高大上,官方解释也不是很容易理解,实际上柯里化很简单!

如fn(1)(2)() | fn(1,2)(3,4,...) ,这种可以连续调用的函数的就是柯里化函数

二.柯里化函数的特点

柯里化函数在最后一次调用的时候,才会去真正执行

三.柯里化函数使用在哪里?

柯里化经常涉及到几个概念:高阶函数、闭包、call/apply,argument

柯里化函数在react的高阶组件中常用,比如react-redux的底层仿写就是高阶组件+柯里化

柯里化的原理就是有参数时返回当前函数,没参数时执行所有参数,返回一个最终结果.这里写一个简单的柯里化函数实现

<script>
        function myCurry(fn) {
            var arr = [];
            return function () {
                if (arguments.length > 0) {
                    arr=arr.concat(Array.from(arguments))
                    return arguments.callee;
                } else {
                    return fn.apply(null,arr)
                }
            }

        }
        let fn=myCurry(function(){
            let arr=Array.from(arguments);
            let sum=arr.reduce(function(total,item){
                return total+item;
            })
            return sum;
        })
        var s=fn(1)(2)()
        console.log( s);//3
       
    </script>

 

posted @ 2019-08-11 21:07  大笛子  阅读(862)  评论(0编辑  收藏  举报