JavaScript 函数柯里化

104 阅读1分钟

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就是利用了函数的柯里化,来实现的延迟执行