koa2源码简单分析(二)

在分析koa2源码之前,先来认识下复合函数,复合函数顾名思义就是把多个函数合并成一个函数,通俗来讲就是一个函数执行完后的结果作为下一个函数的参数来执行,也就是a(b(c(fn)))这种形式。
先来查看如下代码

function add(x, y) {
    return x + y
}

function square(z) {
    return z * z
}

function mult(a) {
    return a *2
}
//先看一个只有固定参数的复合函数
function compose(f1, f2) {
    //返回一个函数
    return function(...args) {
        return f1(f2(...args))
    }
}

let  comp= compose(square, add)
console.log(comp(2,4))    //36

上面就是一个简单的复合函数,现在我们把这个参数扩大到一个数组,这样我们的数组就是一个不固定的长度。

function composes(midle) {
    return midle.reduce(function(leftFn, rightFn) {
        return function(...args) {
            return rightFn(leftFn(...args))
        }
    })
}
let middleWare = [add, square, abc];
let b = composes(middleWare)
console.log(b(1, 6));  //98

解析:

let middleWare = [add, square, abc];
let b = composes(middleWare)

这两行就是定义了一个数组,数组里面的每个元素就是函数的名,在执行composes(middleWare)时,我们首先要定义这是要返回一个函数。然后在利用数组的reduce方法进行叠加。

整体执行过程(可以把代码复制到console里面执行):

//leftFn
ƒ add(x, y) {
    return x + y
}
//rightFn
ƒ square(z) {
    return z * z
}
//leftFn
ƒ (...args) {
   return rightFn(leftFn(...args))
}
//rightFn
ƒ abc(a) {
    return a *2
}
ƒ (...args) {
     return rightFn(leftFn(...args))
}

总结:要很好的理解复合函数的运行过程,对应以后理解高阶函数有很多的相似或通用的地方。

最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容