柯理化

author author     2022-08-09     540

关键词:

在JS中柯里化就是把一个需要传入多个参数的函数变成多个嵌套的只要传入一个参数的函数

在普通函数中的柯理化:

var add=function(x,y){

 return x+y;

}

柯里化:

var addCurring=function(x){

 return function(y){

  return x+y;

}

}

 

addCurring(1)(2);//3

 

如果是多个参数就会有多层嵌套,相当于把一个函数拆分成多个部分,通过组合得到完整的函数,其实柯里化和前端框架的组件思想相同,都是模块化思想。

 

来一个四个参数的例子:

 

var add=function(a,b,c,d){

  console.log(a+b+c+d);

}

柯里化后:

var addCurring=function(a){

return function(b){

return function(c){

return function(d){

console.log(a+b+c+d);//这里写的是逻辑代码,我这里用打印代替

}

}

}

}

var addCurring1=addCurring(1);

var addCurring2=addCurring1(2);

var addCurring3=addCurring2(3);

var addCurring4=addCurring3(4);// 10

如果前面几个参数都是固定的情况可以这样解决:

var addCurring=addCurring(1)(2)(3);

//只需要传入最后一个参数即可

addCurring(4);//10

addCurring(5);//11

addCurring(6);//12

 

高阶函数中:

var currying = function(fn) {

            //这里保存每次的开销

            var args = [];

            return function() {

                //如果传入的参数长度为0,也就是没有传参的情况下,其实就是告诉程序,我要/求总开销了

                if (arguments.length === 0) {

                    //将fn在这块上下文中执行,并且把每天的开销当做参数传入

                    return fn.apply(this, args);

 

                //有参数传入的话,就说明还在记录每天的开销,并没有要/求总开销

                } else {

                    //arguments请自行google,它是一个对象并不是一个数组。

                    //将arguments转为数组后push到args

                    //也就是收到每天的开销后,保存到args中

                    [].push.apply(args, arguments);

                    //把这块上下文再次return出去

                    return arguments.callee;

                }

            }

        };

        var cost = (function() {

            //典型的闭包,将money保存起来

            var money = 0;

            //这里就是currying(fn)中的fn

            return function() {

                //arguments其实就是currying中的args

                //收到了求总开销的命令,下面是真正计算总开销的地方

                for (var i = 0, l = arguments.length; i < l; i++) {

                    money += arguments[i];

                }

                return money;

            }

        })();

        var cost = currying(cost); // 转化成currying 函数

        cost(100); // 未真正求值

        cost(200); // 未真正求值

        cost(300); // 未真正求值

        cost(200); // 未真正求值

        cost(200); // 未真正求值

        cost(50); // 未真正求值

        cost(100); // 未真正求值

        alert(cost()); // 求值并输出:600

 

 

总而言之,柯里化就是使用了功能化的思想来处理函数多个参数的情况,从而提高代码的可阅读性以及可维护性

 

柯理化函数编程思想(代码片段)

柯理化函数编程思想:  函数柯里化(functioncurrying)又称部分求值。一个currying的函数首先会接受一些参数,接受了这些参数后,该函数并不会立即求值,而是继续返回另外一个函数,刚才传入的参数在函数形成的闭包里被保... 查看详情

js函数式编程基础:高阶函数柯理化函数合成loadash

一、函数式编程什么是函数式编程(FP)?FP是一种编程范式,也是一种编程风格,和面向对象是并列的关系。FP用于描述数据或函数之间的映射;根据输入通过某种运算获得相应的输出,即映射关系,例如:y=sin(x)。FP需要有输入和... 查看详情

js高阶编程技巧--柯理化函数(代码片段)

...this指向、参数等预先准备好,这种预先处理的思想即柯理化思想。即,柯理化函数的思想:利用闭包的机制,把一些内容事先存储和处理了,等到后期需要的时候拿来用即可。 当然,这个需求如果用bind写的话,也能实现 查看详情

装载翱翔天空的引擎-jason(黄键)出任柯力士信息安全cto(首席技术官)

装载翱翔天空的引擎-Jason(黄键)出任柯力士信息安全CTO(首席技术官)2016-10-13 柯力士信息安全与国际接轨,是柯力士信息安全近年来一直在做的事情,整合国际信息安全先进技术,了解信息安全国际最新动态,吸收世界... 查看详情

柯力士与云盾达成战略合作,打造信息安全生态圈

近日,柯力士信息安全与云盾正式达成战略合作协议,双方的这次合作将带来更多的资源整合与共享,未来柯力士与云盾平台将共同构建基于“整合+扫描+修复+服务”的多维度、立体化的信息安全生态圈,意味着整合扫描发现,... 查看详情

知柯信息安全(知柯信安)团队简介

知柯信息安全Zhicrknownsecurity简称(知柯信安)是深圳狩猎者网络安全旗下团队。知柯信安致力于信息安全研究,多次协助有关部门打击网络违法犯罪活动。知柯信息安全是一个年轻的研究型团队,我们力求建设一... 查看详情

装载翱翔天空的引擎-jason(黄键)出任柯力士信息安全cto(首席技术官)

2016-10-13 柯力士信息安全与国际接轨,是柯力士信息安全近年来一直在做的事情,整合国际信息安全先进技术,了解信息安全国际最新动态,吸收世界范围信息安全经验。目前都取得了一定的成果。而联合这些国际资源,将... 查看详情

概率:概率的公理化定义

查看详情

袁刚出任上海柯力士信息安全技术有限公司coo首席运营官

...016中国网络空间安全(上海)论坛 秘书长袁刚加入了柯力士信息安全,成为了柯力士新任的COO。650)this.width=650;"alt="互联网信息安全时代创新运营才是硬道理-袁刚出任柯力士COO首席运营官-Zero组织-zero"src="https://mmbiz.qpic.cn/mmbiz... 查看详情

公理化数学的典范

...;德国数学家希尔伯特发表“几何基础”,开启现代公理化数学的大门。2002年,美国数学家H.JeromeKeisler发表“ElementaryCalculus”(自由版权),然而,这部著作至今还没有中译版。2021年11月,中国人民大... 查看详情

macos12.0.1如何安装柯美287打印机驱动,刷卡打印(代码片段)

环境:MacBookPRO2020柯美287打印机问题描述:如何安装柯美287打印机驱动,实现刷卡打印解决方案:1.百度搜索柯美官网2.商用系统中点击支持与下载输入机器型号287选择对应的mac操作系统12.0以上版本使用12.0版本下载完成... 查看详情

自然数的公理化理论体系定义的新方法

...诺的五个命题和在此基础上的三个公理来定义自然数的公理化理论体系.现在,我们用π来定义自然数的公理化理论体系.几年前,美国人用2π代替π,看起来,似乎已经非常的完美了.我也比较认同这个看起来似乎已经非常完美的... 查看详情

微软柯塔娜(cortana)的一句名言

...多少千万台。我操心的问题是,集成在Win10操作系统中的柯塔娜小姐将怎样面对各色各样的人群。由于,在这个世界上。人是最复杂的生物,什么人都有。依据国外媒体报道,有人问柯塔娜。"Cortana,areyoubetterthanSiri?"(意... 查看详情

数学小课堂:集合论的公理化过程(用构建公理化体系的思路来构建自然数)

...划问题(线性代数+最优化)3.1题目3.2答案引言数学是一个公理化的体系,是数学对其它知识体系有启发的地方。数学的思维方式:不轻易相信没有根据的结论,一切要从公理出发,用逻辑得到结论;在解决问题之前先要搞清楚问题... 查看详情

pagehelper分页合理化reasonable源码分析

本文源码分析PageHelper插件在手动配置了分页合理化参数(reasonable=true)之后,当查询页码超出总页数,拦截器是如何实现仍然返回最后一页的数据。PageHelper利用本地线程存储当前线程的分页参数信息privatestatic... 查看详情

pagehelper分页合理化reasonable源码分析

本文源码分析PageHelper插件在手动配置了分页合理化参数(reasonable=true)之后,当查询页码超出总页数,拦截器是如何实现仍然返回最后一页的数据。PageHelper利用本地线程存储当前线程的分页参数信息privatestatic... 查看详情

公理化微积分教材

...向教育部大学数学“教指委”推荐的无穷小微积分就是公理化的微积分教材。                       袁萌         查看详情

公理化数学的典范

...;德国数学家希尔伯特发表“几何基础”,开启现代公理化数学的大门。2002年,美国数学家H.JeromeKeisler发表“ElementaryCalculus”(自由版权),然而,这部著作至今还没有中译版。2021年11月,中国人民大... 查看详情