什么是柯里化?
将使用多个参数的函数转换成一系列使用一个参数的函数
柯里化的用途?
柯里化实际将简单的问题复杂化了,单复杂化的同时,使用函数时拥有了更多的自由度
如常用手机号码校验:
function checkRegExp(regexp, string) {
return regexp.test(string)
}
console.log(checkRegExp(/^1\d{10}$/, '15770638063'))
如果校验多个电话号码,则相同的正则我们需要写多次。
如果用柯里化来封装,先简单实现一个curry函数
function curry(fn, args) {
var args = args || []
let len = fn.length
return function() {
let _args = args.concat(Array.prototype.slice.call(arguments, 0))
if (_args.length >= len) {
return fn.apply(this, _args)
} else {
return curry.call(this, fn, _args)
}
}
}
我们用curry函数再封装手机校验函数,达到参数复用的目的
let _curry = curry(checkRegExp)
let chekcPhone = _curry(/^1\d{10}$/)
最后调用时直接传手机号码即可:
console.log(chekcPhone('15770638063'))
console.log(chekcPhone('13722347879'))
console.log(chekcPhone('18909098989'))