手写函数二:实现柯里化(Currying)函数

507 阅读1分钟

柯里化是什么?

维基百科上说道:柯里化,英语: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('测试'))