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将string类型转换int类型
Dec 09 Javascript
JQuery里面的几种选择器 查找满足条件的元素$("#控件ID")
Aug 23 Javascript
使用js修改客户端注册表的方法
Aug 09 Javascript
纯javascript实现简单下拉刷新功能
Mar 13 Javascript
在Javascript中处理字符串之big()方法的使用
Jun 08 Javascript
jquery实现向下滑出的二级导航下滑菜单效果
Aug 25 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
Jan 28 Javascript
数据结构中的各种排序方法小结(JS实现)
Jul 23 Javascript
jQuery实现表格的增、删、改操作示例
Jan 27 jQuery
vue实现数据控制视图的原理解析
Jan 07 Javascript
浅谈vue的第一个commit分析
Jun 08 Javascript
详解JavaScript类型判断的四种方法
Oct 21 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
在PWS上安装PHP4.0正式版
2006/10/09 PHP
利用discuz实现PHP大文件上传应用实例代码
2008/11/14 PHP
php 正则匹配函数体
2009/08/25 PHP
php设计模式 Composite (组合模式)
2011/06/26 PHP
PHP中执行cmd命令的方法
2014/10/11 PHP
php中实现获取随机数组列表的自定义函数
2015/04/02 PHP
PHP生成树的方法
2015/07/28 PHP
Yii模型操作之criteria查找数据库的方法
2016/07/15 PHP
对xmlHttp对象的理解
2011/01/17 Javascript
jquery点击页面任何区域实现鼠标焦点十字效果
2013/06/21 Javascript
使用ajax+jqtransform实现动态加载select
2014/12/01 Javascript
原生javascript实现DIV拖拽并计算重复面积
2015/01/02 Javascript
javascript弹出拖动窗口
2015/08/11 Javascript
JS实现Select的option上下移动的方法
2016/03/01 Javascript
html+js+highcharts绘制圆饼图表的简单实例
2016/08/04 Javascript
简单实现jQuery多选框功能
2017/01/09 Javascript
学习使用Bootstrap栅格系统
2017/05/11 Javascript
JS实现上传图片的三种方法并实现预览图片功能
2017/07/14 Javascript
angularjs 的数据绑定实现原理
2018/07/02 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
浅谈Vue.use的使用
2018/08/29 Javascript
jQuery实现的上拉刷新功能组件示例
2020/05/01 jQuery
连接Python程序与MySQL的教程
2015/04/29 Python
python列表list保留顺序去重的实例
2018/12/14 Python
Python脚本去除文件的只读性操作
2020/03/05 Python
tensorflow实现从.ckpt文件中读取任意变量
2020/05/26 Python
戴森台湾线上商城:Dyson Taiwan
2018/05/21 全球购物
上海某公司.net方向笔试题
2014/09/14 面试题
行政管理人员精品工作推荐信
2013/11/04 职场文书
实习护士自荐信
2014/06/21 职场文书
党员批评与自我批评范文
2014/09/23 职场文书
外科护士长工作总结
2015/08/12 职场文书
采购部年度工作总结
2015/08/13 职场文书
JavaScript+HTML实现学生信息管理系统
2021/04/20 Javascript
mysq启动失败问题及场景分析
2021/07/15 MySQL
Python识别花卉种类鉴定网络热门植物并自动整理分类
2022/04/08 Python