发布时间:2023-08-04 15:30
经历过一些列的函数式编程思想的学习总结,一些重要的高阶函数的学习,以及前一段时间关于 RxJS 的学习。
我们再回看一次 —— 组合函数 compose
本瓜越来越觉得,【易读】的代码应该是将声明和调用分开来的。根据不同的流程,用函数组合的方式、也可以说它是管道、或者说是链式调用,将声明的函数组合起来,再等待时机进行调用。
如果没有组合函数 compose,函数连续调用将会是嵌套的:
const multi10 = function(x) { return x * 10; } const toStr = function(x) { return `${x}`; } const compute = function(x){ return toStr(multi10(x)) } compute(8)
fn3(fn2(fn1(fn0(x)))),层层嵌套是很容易看错的;
所以,必须尝试将调用层级扁平化!
compose 应运而生,它大概就会是这样:
const compose = function(f,g) { return function(x) { return f(g(x)) } }
let compute = compose(toStr, multi10) compute(8)
通过使用compose函数我们可以把两个函数组合成一个函数,这让代码从右往左执行,而不是层层计算某个函数的结果作为另一个函数的参数,这样代码也更加直观。
当然,我们不能让 compose 限制于只能处理连续调用两个函数,于是支持任意参数版本的 compose 将是这样的:
function compose(...funs){ return (x) =>funs.reduce((acc, fun) => fun(acc), x) }
通过函数组合,我们可以可以声明式地指定函数间的关系,代码的可读性也大大提高,也方便我们后续对代码进行扩展跟重构;
而且在React里面,当我们的高阶组件变多的时候,一个套着一个就很难看,我们就可以通过类似的方式来让我们的高阶组件层级扁平化;
这就是最最原始的 compose,以及它被提出的原始动机~~
以上就是JavaScript前端面试组合函数的详细内容,更多关于JavaScript组合函数的资料请关注脚本之家其它相关文章!
rt-thread学习(一) 创建led闪烁 加入串口设备 pwm配置 modbus主/从测试代码
【12月Top 2】MarTech Challenge 点击反欺诈预测
基于正点原子Linux开发板(ALIENTEK I.MX6U ALPHA V2.2)的个人自学记录
使用 Terraform 在阿里云上快速部署 MQTT 集群
SpringBoot接口 - 如何生成接口文档之非侵入方式(通过注释生成)Smart-Doc?
微信小商店连接赛邮云:快速解决订单信息无法自动告知客户的问题
TI单芯片毫米波雷达代码走读(十七)—— 恒虚警(CFAR)检测浅谈