js组合式函数

function qCompose(...fns){
    //判断传入的是否为函数
    var length = fns.length
    for(let i = 0;i<length; i++){
        if(typeof fns[i] !== 'function'){
            throw new TypeError('传入的参数不是函数')
        }
    }

    // 返回一个函数这里就是nums  nums可能会有多个参数所以用...args
    //
    return function compose(...args){
        var index = 0
        //判断qCompose()的fns是否传了函数 如果没有则直接返回nums传的参数值
        //如果有则只需fns[index]第0个函数  也就是第一个函数  第一个函数返回值给第二个参数(函数)
        //第二个函接受result第一个函数返回值调用 一直循环调用到最后一个
        //第一个函数需要调用一次

        var result = length? fns[index].apply(this,args):args
        for(let index = 1;index<length; index++){
            //拿到结果给下一个函数调用
            result = fns[index].call(this,result)
        }
        return result
    }

}
// nums(2,3)有两个参数  这里可以接受两个
function num(n,m){
    return n * 2 + m
}
//一个函数一般只有一个返回结果 所以第二个函数接受一个结果
function num2(n,m=0){
    return n+3+m
}
function num3(n){
    return n+100
}

var nums = qCompose(num,num2,num3)
console.log(nums(2,3))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值