一.柯里化是什么?
通过函数调用继续返回函数的形式,实现多次接收参数最后统一处理的编码形式 。
二.怎么使用
(1)可以使用lodash插件进行使用
使用的步骤:
1.导入lodash包
const aa = require('lodash')
2.要实现柯里化的函数
function sum(a, b, c, d) {
return a + b + c + d
}
3. curry: 能把普通函数变成柯里化的形式进行调用。
const sumTemp = aa.curry(sum)
4.调用
sumTemp (1,2,3,4 ) //打印的结果是10。
三.解决了什么问题
解决了:变成柯里化的最重要的一个作用,实现参数的复用。
代码演示:
function fn(a){
return function(b,c){
console.log(`${a}${b}${c}`);
}
}
const aa= fn(' https:')
const a1=aa('www.abc.com/','/api') // https:www.abc.com//api
const a2=aa('www.adc.com/','/test') //https:www.adc.com//test
console.log(a1,a2);
在这里复用了'https':这个协议
四.在实际开发中如何进行应用
在实际开发中,如何需要验证多个邮箱和电话
checkByRegExp(/^1\d{10}$/, '18642838455'); // 校验电话号码 checkByRegExp(/^1\d{10}$/,
'13109840560'); // 校验电话号码 checkByRegExp(/^1\d{10}$/, '13204061212'); // 校验电话号码
checkByRegExp(/^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/, 'test@163.com'); // 校验邮箱
checkByRegExp(/^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/, 'test@qq.com'); // 校验邮箱
checkByRegExp(/^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/, 'test@gmail.com'); // 校验邮箱
柯里化:
//进行柯里化
let _check = curry(checkByRegExp);
//生成工具函数,验证电话号码
let checkCellPhone = _check(/^1\d{10}$/);
//生成工具函数,验证邮箱
let checkEmail = _check(/^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$/);
checkCellPhone('18642838455'); // 校验电话号码
checkCellPhone('13109840560'); // 校验电话号码
checkCellPhone('13204061212'); // 校验电话号码
checkEmail('test@163.com'); // 校验邮箱
checkEmail('test@qq.com'); // 校验邮箱
checkEmail('test@gmail.com'); // 校验邮箱
再来看看通过柯里化封装后,我们的代码是不是变得又简洁又直观了呢。
经过柯里化后,我们生成了两个函数 checkCellPhone 和 checkEmail, checkCellPhone 函数只能验证传入的字符串是否是电话号码, checkEmail 函数只能验证传入的字符串是否是邮箱, 它们与 原函数 checkByRegExp 相比,从功能上通用性降低了,但适用性提升了。 柯里化的这种用途可以被理解为:参数复用。转载:https://juejin.cn/post/6844903882208837645。