JS中的一些常用的函数式编程术语


Posted in Javascript onJune 15, 2019

组合 Composition

组合某种类型(含函数)的两个元素,进而生成一个该类型的新元素:

JavaScript

let compose = (f, g) => a => f(g(a))
let toUpperCase = x => x.toUpperCase()
let exclaim = x => x + '!'
let shout = compose(exclaim, toUpperCase);
shout("hello world") // HELLO WORLD!

偏函数应用 Partial Application

一个多参函数,如果我们只提供了部分参数,这种应用就是偏函数应用:

JavaScript

let sum3 = (a, b, c) => a + b + c
let partial = sum3.bind(null, 10, 20)
partial(30) // 60

柯里化 Currying

把多参数函数处理成 接受一个参数,返回一个接受下一个参数的函数 的形式:

JavaScript

let curryingSum3 = (a) => (b) => (c) => a + b + c
let curriedSum3 = curryingSum3(30)(20) // [Function]
curriedSum3(10) // 60

注意:柯里化和偏函数应用是不同的,它只接受单参输入;在Haskell这样的纯函数式语言中,只存在柯里化,多参函数是一种语法糖,这样做的好处是为函数组合提供了更灵活的手段, 并且使得接口更为流畅。

副作用 Side Effect

一个函数或表达式如果出现下面情况被认为有副作用:除了返回结果值,还修改了内部状态,或者为外界植入提供了改变内部状态的可能。有副作用的例子:随机数生成器 或者 IO操作 。

document。prototype。getter=function(){get(this)}

幂等 Idempotency

能够多次使用同样的输入参数无副作用地执行多次:

JavaScript

let id = x => x
id(id(id(10))) === id(10) // true
Math.abs(Math.abs(-1)) === Math.abs(-1) // true

引用透明性 Referential Transparency

一个表达式能够被它的值替换,而不会影响计算结果,这种表达式称为引用透明的。

JavaScript

let greeting = () => 'hello, '
greeting() + 'buddy'

上面的表达式中每次对 greeting() 的调用,都可以被替换为 'hello, ',我们可以断言 greeting()具有引用透明性。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript中节点的最近的相关节点访问方法
Mar 20 Javascript
函数式 JavaScript(一)简介
Jul 07 Javascript
12个超实用的JQuery代码片段
Nov 02 Javascript
JS中artdialog弹出框控件之提交表单思路详解
Apr 18 Javascript
JS给swf传参数的实现方法
Sep 13 Javascript
原生JS查找元素的方法(推荐)
Nov 22 Javascript
angular中实现li或者某个元素点击变色的两种方法
Jul 27 Javascript
vue slot 在子组件中显示父组件传递的模板
Mar 02 Javascript
react native 文字轮播的实现示例
Jul 27 Javascript
基于vue开发微信小程序mpvue-docs跳转页面功能
Apr 10 Javascript
Vue实现附件上传功能
May 28 Javascript
antd日期选择器禁止选择当天之前的时间操作
Oct 29 Javascript
JavaScript模块管理的简单实现方式详解
Jun 15 #Javascript
JavaScript工具库之Lodash详解
Jun 15 #Javascript
jQuery创建折叠式菜单
Jun 15 #jQuery
JavaScript的Proxy可以做哪些有意思的事儿
Jun 15 #Javascript
Async/Await替代Promise的6个理由
Jun 15 #Javascript
一些可能会用到的Node.js面试题
Jun 15 #Javascript
使用Vue.js 和Chart.js制作绚丽多彩的图表
Jun 15 #Javascript
You might like
php异常:Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE  eval()'d code error
2011/05/19 PHP
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
完美的2个php检测字符串是否是utf-8编码函数分享
2014/07/28 PHP
thinkphp备份数据库的方法分享
2015/01/04 PHP
php实现插入数组但不影响原有顺序的方法
2015/03/27 PHP
php中Snoopy类用法实例
2015/06/19 PHP
Yii核心验证器api详解
2016/11/23 PHP
一个js实现的所谓的滑动门
2007/05/23 Javascript
jQuery开发者都需要知道的5个小技巧
2010/01/08 Javascript
复制小说文本时出现的随机乱码的去除方法
2010/09/07 Javascript
Chrome Form多次提交表单问题的解决方法
2011/05/09 Javascript
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
JS打开层/关闭层/移动层动画效果的实例代码
2013/05/11 Javascript
JQuery控制div外点击隐藏而div内点击不会隐藏的方法
2015/01/13 Javascript
JS实现动态移动层及拖动浮层关闭的方法
2015/04/30 Javascript
js实现可折叠展开的手风琴菜单效果
2015/09/07 Javascript
AngularJS封装$http.post()实例详解
2017/05/06 Javascript
vue axios 表单提交上传图片的实例
2018/03/16 Javascript
javascript数据类型中的一些小知识点(推荐)
2019/04/18 Javascript
[42:32]VP vs RNG 2019国际邀请赛淘汰赛 败者组 BO3 第一场 8.21.mp4
2020/07/19 DOTA
在Python中通过threading模块定义和调用线程的方法
2016/07/12 Python
Python使用修饰器执行函数的参数检查功能示例
2017/09/26 Python
Python实现上下班抢个顺风单脚本
2018/02/07 Python
Jupyter安装nbextensions,启动提示没有nbextensions库
2020/04/23 Python
用Python写脚本,实现完全备份和增量备份的示例
2018/04/29 Python
python自动循环定时开关机(非重启)测试
2019/08/26 Python
python elasticsearch环境搭建详解
2019/09/02 Python
英国汽车零件购物网站:GSF Car Parts
2019/05/23 全球购物
servlet面试题
2012/08/20 面试题
小学生竞选班长演讲稿
2014/04/24 职场文书
元旦晚会活动总结
2014/07/09 职场文书
2016中秋节广告语
2016/01/28 职场文书
python实现黄金分割法的示例代码
2021/04/28 Python
教你快速构建一个基于nginx的web集群项目
2021/11/27 Servers
使用python绘制横竖条形图
2022/04/21 Python
Java版 简易五子棋小游戏
2022/05/04 Java/Android