美文网首页
koa2源码简单分析(二)

koa2源码简单分析(二)

作者: 拖着蜗牛看风景 | 来源:发表于2019-05-16 23:20 被阅读0次

在分析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))
}

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

相关文章

  • koa2源码简单分析(二)

    在分析koa2源码之前,先来认识下复合函数,复合函数顾名思义就是把多个函数合并成一个函数,通俗来讲就是一个函数执行...

  • koa2源码简单分析(一)

    在koa的使用中,必修的一个应用是: 根据原理,我们也可以新建一个类似的源码 用node app.js命令运行这个...

  • koa2源码简单分析(三)

    接上篇分析,今天分析koa-compose这个库的源码,这个库的思想就是一个复合函数的思想,是将多个中间件函数合并...

  • Koa2源码分析

    源码结构 Koa的源码中主要为lib目录下的application.js, context.js, request...

  • 迭代器模式在前端的使用场景

    一、迭代器模式在Redux源码中的使用 二、迭代器模式在Koa2源码中的使用 场景一、二都是利用迭代器模式,依次调...

  • koa 洋葱模型

    分析 1、首先这是koa2最简单的入门例子,我将通过这个入门例子来演示koa2的洋葱模型 在这里面,app首先是调...

  • koa2入门系列

    koa2入门系列(一) koa2入门系列(二) koa2入门系列(三) koa2入门系列(四) koa2入门系列(...

  • JNI 基础 - Android 共享内存的序列化过程

    Parcel源码分析 parcel的简单使用 Parcel.obtain()源码分析 最终会走到 nativeCr...

  • java源码分析之LinkedHashMap

    相关文章java源码分析之HashMap(一)java源码分析之HashMap(二)java源码分析之HashMa...

  • 环信官方Demo源码分析及SDK简单应用-主界面的三个fragm

    环信官方Demo源码分析及SDK简单应用 环信官方Demo源码分析及SDK简单应用-ChatDemoUI3.0 环...

网友评论

      本文标题:koa2源码简单分析(二)

      本文链接:https://www.haomeiwen.com/subject/bqhgaqtx.html