函数柯里化案例题解2

问题描述

已知 fn 为一个预定义函数,实现函数 curryIt,调用之后满足如下条件:
1、返回一个函数 a,a 的 length 属性值为 1(即显式声明 a 接收一个参数)
2、调用 a 之后,返回一个函数 b, b 的 length 属性值为 1
3、调用 b 之后,返回一个函数 c, c 的 length 属性值为 1
4、调用 c 之后,返回的结果与调用 fn 的返回值一致
5、fn 的参数依次为函数 a, b, c 的调用参数

问题解答

函数柯里化的实现,只不过严格限制了每次返回的函数只能传入一个参数:

function curryIt(fn) {
    let args = []   
    
    return function curried(arg) {
        args.push(arg)       
        if (args.length >= fn.length) {
            return fn.apply(this, args)
        } else {
            return function(arg2) {   
                return curried.call(this, arg2)
            }
        }
    }
}
用户头像
登录后发表评论