1.什么是柯里化
维基百科上说道:柯里化,英语:Currying(果然是满满的英译中的既视感),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
我个人的理解是:把一个函数传递参数的个数变为一,同时子函数处理余下的参数,并且返回新的结果的技术
function add(a,b){
return a+b
}
//转化后
function add(a){
return function(b){
a+b
}
}
这个就是柯里化后的样子,大家应该都不陌生,那么它的作用呢?
(1)参数复用
// 函数封装后
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
(2)延迟运行
bind就是利用了函数的柯里化,来实现的延迟执行