柯里化
什么是柯里化
Currying(果然是满满的英译中的既视感),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
function foo(x, y) {
return x + y;
}
// 柯里化
function bar(x) {
return function(y) {
return x + y;
}
}
bar(1)(2); // 3
看到上面这个例子,我们明白柯里化其实就是先用一个函数接受一个参数,然后再返回一个函数接受另一个参数,最后返回计算结果。但是,有什么废了这么大功夫有什么用呢?
// 正常正则验证字符串 reg.test(txt)
// 函数封装后
function check(reg, txt) {
return reg.test(txt)
}
check(/d+/g, 'test') //false
check(/[a-z]+/g, 'test') //true
// Currying后
function curryingCheck(reg) {
return function(txt) {
return reg.test(txt)
}
}
var hasNumber = curryingCheck(/d+/g)
var hasLetter = curryingCheck(/[a-z]+/g)
hasNumber('test1') // true
hasNumber('testtest') // false
hasLetter('21212') // false
上面示例了一个正则校验,正常来说,我们直接调用check就可以了,但是我们要检验很多地方有没有数字,那么我们就需要重复调用check且传入重复参数。通过柯里化就可以达到复用第一个参数。