柯里化函数 / 函数的柯里化
配合 模块化开发使用的一种函数的编程语法
`将 一个函数中输入多个参数的形式修改成 多个函数 每个函数设定 一个参数`
本质上是闭包的语法形式
原始函数
function fun( 参数1 , 参数2 , 参数3... ){}
柯里化后的函数
function fun( 参数1 ){
return function( 参数2 ){
return function( 参数3 ){
....
}
}
}
柯里化函数的优点
1, 之前的函数每次调用都要输入多个参数
柯里化的函数 每次调用 只需要输入一个参数
语法形式更简洁
2, 之前的函数 被多次调用执行
如果 正则表达式 需要修改
每一次调用的函数中 参数都需要修改
柯里化的函数 只需要将第一次调用时 输入的实参正则表达式修改
之后每次调用输入的实参字符串不需要修改
可维护性可操作性更高
柯里化函数的缺点
柯里化函数本质上使用的是闭包的语法形式
具有 闭包语法的优点缺点
// 正则验证函数
// 参数1 reg 是你输入的正则表达式
// 参数2 str 是你输入的要验证的字符串
function isReg( reg , str ){
return reg.test( str );
}
// 验证账号 数字字母下划线6-8位
let res1 = isReg( /^\w{6,8}$/ , '1234567' );
let res2 = isReg( /^\w{6,8}$/ , '123' );
console.log( res1 );
console.log( res2 );
// 验证密码 数字字母下划线7-9位
let res3 = isReg( /^\w{7,9}$/ , '1234567' );
let res4 = isReg( /^\w{7,9}$/ , '123' );
console.log( res3 );
console.log( res4 );
// 验证邮箱 数字字母下划线3-6位
let res5 = isReg( /^\w{3,6}$/ , '1234567' );
let res6 = isReg( /^\w{3,6}$/ , '123' );
console.log( res5 );
console.log( res6 );
// 柯里化之后的正则验证函数
function isReg( reg ){
return function( str ){
return reg.test( str );
}
}
// 变量nameRegFun 中 存储的是 return 的匿名函数
// 匿名函数中 reg.test( str )
// reg 存储的是 当前输入的 正则表达式
const nameRegFun = isReg( /^\w{6,8}$/ );
// 调用 变量nameRegFun
let res1 = nameRegFun('1234567');
let res2 = nameRegFun('123');
console.log( res1 );
console.log( res2 );