首页 > 其他 > 详细

函数科里化

时间:2021-04-03 20:40:32      阅读:24      评论:0      收藏:0      [点我收藏+]
函数科里化是高阶函数,关键在于函数科里化的意义或者用途。
函数科里化有至少两种实现方式,我写两种。一种是将参数拆分开就能求值。

  function curry(fn, currArgs) { // 这里的fn就是sum方法
            return function () {
                let args = [].slice.call(arguments);
                // 首次调用时未提供参数currArgs,因此不用进行拼接执行
                if (currArgs !== undefined) {
                    args = args.concat(currArgs); // 这里的currArgs是上次递归传递进来的,也就是上次递归的args
                }
                // 递归调用
                if (args.length < fn.length) {
                    return curry(fn, args);
                }
                return fn.apply(null, args); // 这里调用了apply方法,将收集起来的args参数全都传入fn中
            }
        }

  

这一种是利用递归思想实现。递归的条件是fn的参数个数和args的参数比较,一直参数相等计算结果。

另一种

       function curry2(){
            var args = [];
            return function(){
                if(arguments.length ===0){
                    return fn.apply(this,args)
                }else {
                    [].push.apply(args, arguments)
                    return arguments.callee
                }
            }
        }

这是利用闭包同时返回函数本身,然后一直没有参数时候计算结果。

函数科里化是函数式编程的一种。是为了解决复杂性产生的一种技术。实际上因为使用了递归在性能上它是不如原来函数的。但是它的好处就是提供了便利性。

但是应用场景是什么呢?

后一种的应用场景可以加入有一个输入面板,如果没有输入了就可以计算了;而前一种暂时没有找到。

函数科里化

原文:https://www.cnblogs.com/zhensg123/p/14613949.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!