什么是函数柯里化
- 一个函数有多个参数,根据这个函数的参数个数,转化成多个函数
- 函数柯里化在高阶函数中体现
- 大多是情况下是为了减少重复传递的不变参数
案例
function isType(type,val) {
return Object.prototype.toString.call(val) === `[object ${type}]`
}
console.log(isType('Number',1))
console.log(isType('String',1))
console.log(isType('Array',[1,2,3]))
function isType(type) {
return function (val) {
return Object.prototype.toString.call(val) === `[object ${type}]`
}
}
const isNumber = isType('Number')
const isString = isType('String')
const isArray = isType('Array')
console.log(isNumber(1))
console.log(isString(1))
console.log(isArray([1,2,3]))
函数柯里化转化
function sum(a,b,c,d) {
return a+b+c+d
}
function currying(fn) {
let args = []
const _curry = (arr = [])=>{
args.push(...arr)
return args.length >= fn.length ? fn(...args) : (...args)=>_curry(args)
}
return _curry()
}
const fn = currying(sum)
let fn1 = fn(1)
let fn2 = fn1(2,3)
let res = fn2(4)
console.log(res)