Redux源码分析(3) — compose
2023-06-18·2min
type
Post
summary
status
Published
category
tags
slug
date
Jun 18, 2023
password
icon
compose.js
compose函数其实是函数式编程里常用的组合函数,作用就是将传入的多个函数组合起来,使多个函数可以组合调用。
下面看一下代码:
初看时是一脸懵逼的,尤其是套娃式的组合函数,层层的return让人头大,我们慢慢分析。
compose函数会处理三种情况:
1.当没有传入函数时,返回一个【接受什么就返回什么】的函数
2.当只传入了一个函数时,返回这个函数
3.当传入的函数>=2,调用reduce方法,将传入的函数组合成一个新函数(懵逼了)
举个栗子🌰
我们重点看一下这段代码:
这里用了js原生的reduce方法,reduce就不多说了(懒)。
我们还是用上面的例子来逐步分析一下,compose(fn1, fn2, fn3, fn4)根据 compose 的源码, 其实执行的就是:
第几轮循环 | a的值 | b的值 | 返回的值 |
1 | fn1 | fn2 | (...args) => fn1(fn2(...args)) |
2 | (...args) => fn1(fn2(...args)) | fn3 | (...args) => fn1(fn2(fn3(...args))) |
3 | (...args) => fn1(fn2(fn3(...args))) | fn4 | (...args) => fn1(fn2(fn3(fn4(...args)))) |
经过compose的处理后,返回的是一个层层嵌套的函数,当传入参数,会从里向外依次执行,每个函数执行的结果,都会变成下一个函数的参数,最后将总结果返回。