函数柯里化的作用一:参数复用(正则匹配案例)
什么是函数柯里化 currying?
做题时看到 currying
这个词还挺有意思的,本意是咖喱,翻译为中文叫柯里化,是因为是以逻辑学家 Haskell Curry 命名的。
arity(参数个数)是函数所需的形参的数量。
函数柯里化(Currying)意思是把接受多个 arity 的函数变换成接受单一 arity 的函数。
换句话说,就是重构函数让它接收一个参数,然后返回接收下一个参数的函数,依此类推。
这有点像套娃,就是把含有多个参数的函数,分解为一个一个的函数进行返回。
例一:
function unCurried(x, y) {return x + y;
}function curried(x) {return function(y) {return x + y;}
}
// ES6 写法
const curried = x => y => x + ycurried(1)(2) // 3
例二:
function add(x) {return function(y) {return function(z) {return x + y + z}}
}add(10)(20)(30); // 60
柯里化的作用之一:参数复用(正则匹配案例)
函数柯里化具体怎样使用呢?我搜到了这篇文章函数柯里化 ,现在把其中一个正则表达式的例子抽出来。
使用通用函数(平常写的代码)
function checkByRegExp(regExp, str) {return regExp.test(str)}// 校验手机号checkByRegExp(/^1\d{10}$/, '15152525634'); checkByRegExp(/^1\d{10}$/, '13456574566'); checkByRegExp(/^1\d{10}$/, '18123787385'); // 校验邮箱checkByRegExp(/^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/, 'fsds@163.com'); checkByRegExp(/^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/, 'fdsf@qq.com'); checkByRegExp(/^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/, 'fjks@qq.com');
它的缺点是:
- 校验同一类型的数据时,相同的正则写了很多次
- 代码可读性较差,如果没有注释,我们并不能一下就看出来正则的作用
函数柯里化
// 第一步:定义柯里化函数function curryingCheckByRegExp(regExp) {return function(str) {// console.log(regExp.test(str)) // 6 个 truereturn regExp.test(str)}}// 第二步:将最外层函数保存为变量// 校验手机const checkPhone = curryingCheckByRegExp(/^1\d{10}$/)// 校验邮箱const checkEmail = curryingCheckByRegExp(/^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/)// 第三步:调用第二层函数// 校验手机号checkPhone('15152525634');checkPhone('13456574566'); checkPhone('18123787385'); // 校验邮箱checkEmail('fsds@163.com'); checkEmail('fdsf@qq.com'); checkEmail('fjks@qq.com');
柯里化的其他作用,请看这篇文章:前端面试手写代码——函数柯里化
函数柯里化的作用一:参数复用(正则匹配案例)相关推荐
- 了解js基础知识中的作用域和闭包以及闭包的一些应用场景,浅析函数柯里化
js基础知识中的作用域和闭包 一.作用域 1.作用域.自由变量简介 (1)作用域定义 (2)作用域实例演示 (3)自由变量定义 (4)自由变量实例演示 2.作用域链简介 (1)作用域链定义 (2)作用 ...
- JavaScript 专题之函数柯里化
JavaScript 专题系列第十三篇,讲解函数柯里化以及如何实现一个 curry 函数 定义 维基百科中对柯里化 (Currying) 的定义为: In mathematics and comput ...
- 函数柯里化的几个例子
函数柯里化 用于创建一个已经设置好了一个或或者多个参数的函数 通用写法如下: function curry(fn){var args = Array.prototype.slice.call(argu ...
- 深入详解python高级特性——函数柯里化(Currying)与反柯里化
前言:本章的内容本来很简单,但是涉及到的理论部分相对较多,想要彻底弄懂前因后果需要具备以下几个知识点, (1)python的高阶函数 (2)python的装饰器本质 (3)Python的functoo ...
- 从一道面试题认识函数柯里化
最近在整理面试资源的时候,发现一道有意思的题目,所以就记录下来. 题目 如何实现 multi(2)(3)(4)=24? 首先来分析下这道题,实现一个 multi 函数并依次传入参数执行,得到最终的结果 ...
- JS - 函数柯里化
一.概念 柯里化是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数. 简单来说,柯里化是一种函数的转换,它是指将一个函数从可调用的 ...
- JavaScript 中函数 柯里化风格的运用
导语 当我第一次看见 柯里化 这个词语的时候,我也表现出一脸懵,在代码程序中,看见这种 "高大上"的一些词汇叫法的时候,下意识的会觉得这个概念很难很深奥,但是当冷静下来,去深究过后 ...
- 函数柯里化的意义_详解JS函数柯里化
第一次看到柯里化这个词的时候,还是在看一篇算法相关的博客提到把函数柯里化,那时一看这个词就感觉很高端,实际上当你了解了后才发现其实就是高阶函数的一个特殊用法. 果然是不管作用怎么样都要有个高端的名字才 ...
- 【JavaScript】函数柯里化
文章目录 1. 什么是函数柯里化 2. 柯里化常用场景 2.1 参数复用 2.2 提前返回 2.3 延迟执行 3. 经典例题 3.1 封装通用柯里化函数 3.2 创建一个灵活的多步执行的柯里化函数 3 ...
最新文章
- LeetCode 21. Merge Two Sorted Lists--合并2个有序列表--python递归,迭代解法
- 使用SAX解析XML封装实体Bean
- CSS3文本居中显示、圆形圆角绘制、立体阴影效果设置实例演示
- 远程管理卡介绍使用场景
- .net数据绑定控件中的数据导出到Excel
- lshw linux_Linux lshw命令–获取Linux硬件信息
- 如何下载Idea专业版
- linux 桌面对比,七大顶级Linux桌面比较
- qt 部署 错误_QT for Windows安装配置总结及采坑问题汇总
- 《程序员修炼之道》读书笔记(4):注重实效的偏执(防卫策略)
- minigui学习笔记五
- 反锯齿渲染技术--SMAA
- Dubbo配置加载问题
- el-table行合并,单列行合并或者指定列合并行
- mysql连接三个表
- Ubuntu升级软件和ubuntu升级系统的命令
- 对捕金猎人的买涨买跌交易感悟?(交易基础篇)
- DLL文件是什么?有几种调用方式?
- 星起航:我国对外贸易强势发展,武汉自贸区未来或将成为外贸主力
- 免费Java游戏源代码素材推荐