柯里化是什么?
维基百科上说道:柯里化,英语:Currying(果然是满满的英译中的既视感),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下的参数而且返回结果的新函数的技术。
函数实现柯里化方法
function MyCurrying(fn) {
function curried(...args) {
// 判断接收参数个数
if (args.length >= fn.length) {
return fn.apply(this, args)
} else {
// 没有达到参数个数要求就返回函数继续接收参数,递归调用
function curried2(...args2) {
return curried.apply(this, [...args, ...args2])
}
return curried2
}
}
return curried
}
function log(data, type, message) {
console.log(`[${data.getHours()}:${data.getMinutes()}][${type}]:[${message}]`)
}
let newFunc = MyCurrying(log)
let newFunc1 = newFunc(new Date())('info')
console.log(newFunc1('test'))
console.log(newFunc1('测试'))