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 面向对象 对象(Object)
May 13 Javascript
js同比例缩放图片的小例子
Oct 30 Javascript
将字符串中由空格隔开的每个单词首字母大写
Apr 06 Javascript
详解AngularJS中自定义指令的使用
Jun 17 Javascript
基于bootstrap实现广告轮播带图片和文字效果
Jul 22 Javascript
jQuery实现导航滚动到指定内容效果完整实例【附demo源码下载】
Sep 20 Javascript
jquery pagination分页插件使用详解(后台struts2)
Jan 22 Javascript
基于JS对象创建常用方式及原理分析
Jun 28 Javascript
删除table表格行的实例讲解
Sep 21 Javascript
vue2.0结合Element-ui实战案例
Mar 06 Javascript
jquery简单实现纵向的无缝滚动代码实例
Apr 01 jQuery
JS函数进阶之prototy用法实例分析
Jan 15 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 COOKIE立即生效,不用刷新就可以使用
2011/03/09 PHP
php进行ip地址掩码运算处理的方法
2016/07/11 PHP
基于jQueryUI和Corethink实现百度的搜索提示功能
2016/11/09 PHP
phpstudy默认不支持64位php的解决方法
2017/02/20 PHP
扩展easyui.datagrid,添加数据loading遮罩效果代码
2010/11/02 Javascript
关于jquery append() html时的小问题的解决方法
2010/12/16 Javascript
开发中可能会用到的jQuery小技巧
2014/03/07 Javascript
jquery实现的一个简单进度条效果实例
2014/05/12 Javascript
js代码延迟一定时间后执行一个函数的实例
2017/02/15 Javascript
angularJs的ng-class切换class
2017/06/23 Javascript
webpack 2的react开发配置实例代码
2017/07/28 Javascript
从parcel.js打包出错到选择nvm的全部过程
2018/01/23 Javascript
详解js类型判断
2018/05/22 Javascript
vue使用监听实现全选反选功能
2018/07/06 Javascript
Vue唯一可以更改vuex实例中state数据状态的属性对象Mutation的讲解
2019/01/18 Javascript
ant design vue 表格table 默认勾选几项的操作
2020/10/31 Javascript
python中xrange和range的区别
2014/05/13 Python
python3之微信文章爬虫实例讲解
2017/07/12 Python
python探索之BaseHTTPServer-实现Web服务器介绍
2017/10/28 Python
Python numpy生成矩阵、串联矩阵代码分享
2017/12/04 Python
python3实现随机数
2018/06/25 Python
Python对CSV、Excel、txt、dat文件的处理
2018/09/18 Python
python 循环读取txt文档 并转换成csv的方法
2018/10/26 Python
Python单元测试与测试用例简析
2019/11/09 Python
Python爬虫之爬取淘女郎照片示例详解
2020/07/28 Python
乡镇办公室工作决心书
2014/03/11 职场文书
舞蹈兴趣小组活动总结
2014/07/07 职场文书
2014和解协议书范文
2014/09/15 职场文书
群众路线领导班子四风对照检查材料
2014/09/27 职场文书
交通事故赔偿协议书怎么写
2014/10/04 职场文书
安全第一课观后感
2015/06/18 职场文书
小学运动会报道稿
2015/07/22 职场文书
关于军训的感想
2015/08/07 职场文书
新学期小学班主任工作计划
2019/06/21 职场文书
分享python函数常见关键字
2022/04/26 Python
MySQL脏读,幻读和不可重复读
2022/05/11 MySQL