JavaScript——compose函数

news/2024/10/30 15:30:53/

目录

1. 普通函数

2. compose函数

2.1 概念

2.2 特性

2.3 作用

2.4 实现

2.5 pipe函數

3. 链式调用

4. 总结


1. 普通函数

我们先来看一下下面这几个函数:

function multiplyTwo(num) {return num * 2;
}
function minusOne(num) {return num - 1;
}
function addTwo(num) {return num + 2;
}
function addThree(num) {return num + 3;
}

如果要实现 10*2-1+2+3 ,用普通函数的做法会是什么呢?

var result = multiplyTwo(10);
result = minusOne(result);
result = addTwo(result);
result = addThree(result);//或者var result = addThree(addTwo(minusOne(multiplyTwo(10)))); //24

从上面的例子可以看出,如果需要嵌套的函数有很多,那么类似上面 f(g(h(x))) 的这种写法可读性太差,考虑能不能写成 (f, g, h)(x) 这种比较直观的形式,于是compose()函数正好可以帮助我们实现。

2. compose函数

2.1 概念

compose 是函数式编程中一个非常重要的函数,compose的函数作用就是组合函数,将需要嵌套执行的函数扁平化处理。将多个函数串联起来,上一个函数的输出作为下一个函数的输入。

2.2 特性

执行顺序是从右到左,前面函数的执行结果交给后面函数处理。

2.3 作用

实现函数式编程中的 pointfree 风格(无参数),使我们专注于【转换】而不是【数据】

2.4 实现

以上面的例子,用compose函数来实现:

for循环实现:

function compose() {//argumentsconst args = [].slice.apply(arguments);return function (num) {var _result = num;for (var i = args.length -1; i >= 0; i--){_result = args[i](_result);}return _result;}
}compose(addThree, addTwo ,minusOne, multiplyTwo)(10);  //24

reduceRight实现:

function compose() {//arguments不是一个真正的数组,先转化成真正的数组const args = [].slice.apply(arguments);return function (num) {return args.reduceRight((res, cb) => cb(res), num);}
}compose(addThree, addTwo ,minusOne, multiplyTwo)(10); //24

2.5 pipe函數

pipe函数和compose函数功能一样,只不过是从左往右执行。

3. 链式调用

我们也可以用promise来组织成一个链式调用。但是注意,这和面向对象的链式调用有区别。

Promise.resolve(10).then(multiplyTwo).then(minusOne).then(addTwo).then(addThree).then(res=>{console.log(res); //24
})

4. 总结

compose函数可以理解为为了方便我们连续执行方法,把自己调用传值的过程封装起来,我们只需要给conmose函数我们要执行哪些方法,他会自动执行。

如果内容有错误的地方欢迎指出(觉得看着不理解不舒服想吐槽也完全没问题)

如果有帮助,欢迎点赞和收藏哟


http://www.ppmy.cn/news/292834.html

相关文章

C++【哈希表封装unordered_map/set】—含有源代码

文章目录 (1)修改原哈希表(2)迭代器(3)最后一步(4)关于key是自定义类型的额外补充(面试题)(5)源代码 (1)修改原哈希表 和红黑树封装一…

联想 计算机无线网络设置方法,联想笔记本无线网络开关,详细教您联想笔记本无线网络开关...

联想笔记本是联想集团生产的可携带的笔记本,可帮助我们娱乐、办公。笔记本电脑在生活办公中使用很方便,有时候想要连接无线网却看不到图标,一般来说笔记本电脑都配有无线网络快捷开关,那么怎么打开笔记本无线网络?下面…

关于联想笔记本无线网老是掉线的解决方法

因为我遇到了多次联想笔记本wifi老是掉线的情况, 所以我搜集了网上的比较有效的方法 以及自己的做法分享给同为用联想笔记本的兄弟萌: 右键【此电脑】点击【管理】打开 在窗口中点击【设备管理器】选项,点击打开后找到【网络适配器】里的无…

联想笔记本上Ubuntu无线网卡问题

可能有两个问题: 1、无无线网卡驱动 2、无线网卡驱动不能自动加载 问题1:无线网卡驱动 百度出网卡驱动iwlwifi-9000,如iwlwifi-9000-pu-b0-jf-b0-34.618819.0.tar.gz,解压后将文件“.ucode”复制到目录/lib/firmware/ 问题2&am…

apktool for mac

安装步骤 1、Apktool下载 安装apktool Apktool下载 macOS: Download Mac wrapper script (Right click, Save Link As apktool)Download apktool-2 (find newest here)Rename downloaded jar to apktool.jarMove both files (apktool.jar & apktool) to /usr/local/bin …

android联想搜索不到wifi,联想笔记本搜不到无线网解决办法

可能还有些网友对于联想笔记本搜不到无线网的情况不太了解。下面是小编收集整理的,希望对大家有帮助~~ 联想笔记本搜不到无线网的解决方法一: 笔记本搜不到无线信号,可通过如下方式修复: 1***右击“我的电脑”,再选择“…

联想 Yoga C740::关于Ubuntu16.04下无法识别Intel WIFI6 AX201无线网卡的解决方案

关于Ubuntu16.04下无法识别Intel WIFI6 无线网卡的解决方案 环境: 联想 Yoga C740 i5-10210U 16GB 无线网卡 Intel WIFI6 AX201 (在自带的Window10 系统的设备管理器下可以看到)Ubuntu16.04 LTS 一、安装干净的Ubtuntu16.04 不展开 二、安…

联想i5无线网无法连接服务器,联想笔记本不能连接无线网的解决方法

联想笔记本不能连接无线网的解决方法 急需使用无线网络.可以暂时降低加密协议(如WEP)使用.最有效de解决办法是换一块全新de内置/外置无线网卡.最好选择支持802.11n标准。下面是jy135小编收集整理的联想笔记本不能连接无线网的解决方法,欢迎阅读。 联想笔记本不能连接…