函数柯里化遇到了generator

起因

最近在看掘金的面试经的时候,函数柯里化的出镜率相当高,大家对于这类面试题也有了相关的标准答案,今天我交一份不一样的答案给大家。

思考过程

首先函数的柯里化带来的结果是,使得原本要接收n个参数的函数可以分步接收参数,在参数个数满足条件后再执行,想到这个流程,我就想到了ES6里面的generator函数,因为这两者的流程很相似,generator函数不是立即执行,而是通过next按步执行,而且next可以传值,这样就肯定可以用generator函数改写相关函数为“柯里化函数”了。

答卷

    function gKeli(fn) {
        let len = fn.length
        let args = []
        let result
        function *gg() {
            for (let i = 0; i < len; i++) {
                let t = yield
                args.push(t)
            }
            result = fn.apply(null, args)
        }
        let tt = gg()
        tt.next()
        return function ah(t) {
            tt.next(t)
            if(result) {
                return zz
            }
            return ah
        }
    }
    
    function add(a, b, c) {
        return a + b + c
    }
    
    console.log(gKeli(add)(1)(2)(3)) // 输出6
复制代码

转载于:https://juejin.im/post/5ca1ce94e51d451f2f1f3f1f

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值