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 相关文章推荐
js宝典学习笔记(上)
Jan 10 Javascript
JS解析XML的实现代码
Nov 12 Javascript
JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结
Jun 18 Javascript
一个原生的用户等级的进度条
Jul 03 Javascript
Jquery 获取对象的几种方式介绍
Jan 17 Javascript
浅谈Node.js中的定时器
Jun 18 Javascript
简单了解Backbone.js的Model模型以及View视图的源码
Feb 14 Javascript
js 开发之autocomplete="off"在chrom中失效的解决办法
Sep 28 Javascript
ios设备中angularjs无法改变页面title的解决方法
Sep 13 Javascript
BootstrapValidator实现表单验证功能
Nov 08 Javascript
easyUI 实现的后台分页与前台显示功能示例
Jun 01 Javascript
微信小程序用户盒子、宫格列表的实现
Jul 01 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
打造计数器DIY三步曲(上)
2006/10/09 PHP
zend framework配置操作数据库实例分析
2012/12/06 PHP
laravel 去掉index.php伪静态的操作方法
2019/10/12 PHP
PHP 裁剪图片
2021/03/09 PHP
JavaScript基本对象
2007/01/11 Javascript
火狐4、谷歌12不支持Jquery Validator的解决方法分享
2011/06/20 Javascript
jQuery源码分析-05异步队列 Deferred 使用介绍
2011/11/14 Javascript
Javascript验证上传图片大小[前台处理]
2014/07/18 Javascript
jquery.idTabs 选项卡使用示例代码
2014/09/03 Javascript
jquery图片切换插件
2015/03/16 Javascript
JavaScript获取页面中表单(form)数量的方法
2015/04/03 Javascript
js实现简洁的TAB滑动门效果代码
2015/09/06 Javascript
微信和qq时间格式模板实例详解
2016/10/21 Javascript
vue工程全局设置ajax的等待动效的方法
2019/02/22 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
2019/07/23 Javascript
TypeScript 引用资源文件后提示找不到的异常处理技巧
2020/07/15 Javascript
js实现随机点名
2021/01/19 Javascript
uniapp微信小程序:key失效的解决方法
2021/01/20 Javascript
树莓派实现移动拍照
2019/06/22 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
2020/04/23 Python
python如何编写win程序
2020/06/08 Python
用python读取xlsx文件
2020/12/17 Python
浅析Python打包时包含静态文件处理方法
2021/01/15 Python
用css3实现当鼠标移进去时当前亮其他变灰效果
2014/04/08 HTML / CSS
图解CSS3制作圆环形进度条的实例教程
2016/05/26 HTML / CSS
领先的荷兰线上超市:荷兰之家Holland at Home(支持中文)
2021/01/21 全球购物
DBA的职责都有哪些
2012/05/16 面试题
学生会干部自荐信
2014/02/04 职场文书
父母寄语大全
2014/04/12 职场文书
小学生安全演讲稿
2014/04/25 职场文书
教师节演讲稿
2014/05/06 职场文书
个人委托书
2014/07/31 职场文书
计生工作先进事迹
2014/08/15 职场文书
机修车间主任岗位职责
2015/04/08 职场文书
升学宴学生致辞
2015/09/29 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书