1.λ演算(lambda calculus)
lambda演算强调的是变换规则的运用
2.柯里化:
代码
function curry(fn, args) {
var length = fn.length
var args = args || []
return function() {
newArgs = args.concat(Array.prototype.slice.call(arguments))
if (newArgs.length < length) {
return curry.call(this,fn,newArgs)
} else {
return fn.apply(this,newArgs)
}
}
}
function multiFn(a, b, c) {
return a * b * c
}
var multi = curry(multiFn)
multi(2)(3)(4)
multi(2,3,4)
multi(2)(3,4)
multi(2,3)(4)
意义
在于把多个参数的函数等价转化成多个单参数函数的级联,这样所有的函数就都统一了,方便做lambda演算。
const judgeFormat = boolean => item => !/^(13[0-9]|14[01456879]|15[0-35-9]|16[2567]|17[0-8]|18[0-9]|19[0-35-9])\d{8}$/.test(item) ^ boolean
const judgeRepeat = boolean => (item, _, array) => array.indexOf(item) == array.lastIndexOf(item) ^ boolean
this.count.correct = phoneList.filter(judgeRepeat(false)).filter(judgeFormat(true)).length