概念
柯里化, Currying(局部化),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
用途
- 分步, 例如加法
function add(a, b) {
return a + b
}
add(1, 2) // 3
function curryingAdd(a){
return function(b) {
return a + b
}
}
curryingAdd(1)(2) // 3
- 参数复用, 如正则匹配
function check(reg, text) {
return reg.test(text)
}
check(/jj/,'jj') // true
check(/jj/,'tt') // false
//可以直接写为
function curringCheck(reg) {
return function(text){
return reg.test(text)
}
}
let checkFunc = curringCheck(/jj/)
checkFunc('jj') // true
checkFunc('js') // false
- 延迟运行
Function.prototype.bind = function () {
var self = this // 保存原函数
var context = [].shift.call(arguments) // 保存需要绑定的this上下文
var args = [].slice.call(arguments) // 剩余的参数转为数组
return function () { // 返回一个新函数
// 合并参数
var pars = [].concat.call(args, [].slice.call(arguments))
self.apply(context, pars)
}
}
window.a = 1
window.b = 2
function log(){
console.log(this.a, this.b)
}
let k = log.bind(window)
k() // 1 2
像我们js中经常使用的bind,实现的机制就是Currying