函数柯里化
函数柯里化是接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数。并且返回接受余下的参数而且返回结果的新函数的技术。
可以从调用 fn(a,b,c)
转变为 fn(a)(b)(c)
javascript
function curry(fn){
return function(a){
return function(b){
return fn(a,b)
}
}
}
function sum (a,b) {
return a + b
}
let sumCurry = curry(sum)
sum(1,2)
// 3
sumCurry(1)(2)
// 3
函数柯里化的用途
参数复用
正则校验的时候有的时候有很多参数,可以设置reg参数值之后不断复用这个函数。
javascript
// 校验
function verify(reg,txt){
return reg.test(txt)
}
verify(/\d+/g, 'test') //false
verify(/[a-z]+/g, 'test') //true
function curryingVerify(reg) {
return function(txt) {
return reg.test(txt)
}
}
let isNumber = curryingVerify(/\d+/g)
let isText = curryingVerify(/[a-z]+/g)
isNumber('test') //false
isText('test') //true
延迟运行
javascript
function curry(fn){
return function(a){
return function(b){
return function(c){
return fn(a,b,c)
}
}
}
}
function sum(a,b,c){
return a+b+c
}
let newCurry = curry(sum)
newCurry(1)(2)
// ƒ (c){
// return fn(a,b,c)
// }
上面传入多个参数的 sum(1)(2)(3)
,就是延迟执行的最后例子,传入参数个数没有满足原函数入参个数,都不会立即返回结果,则返回偏函数。