柯里化,英语:Currying(果然是满满的英译中的既视感),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
我们常用的bind就是一种函数柯里化
// 柯里化 Currying后
function test(x) {
return function(y){
return x + y;
}
};
var aa = test(1);
aa(3)
aa(4)
//当地一个参数需要重复使用,可以用柯里化
// bind 实现柯里化
function test2(a, b ,c) {
return a + b;
}
test2.bind(null, 1)(2,3); // 3
柯里化的好处
1.参数复用
// 正常正则验证字符串 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