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 相关文章推荐
jQuery 1.0.4 - New Wave Javascript(js源文件)
Jan 15 Javascript
使用jQuery简化Ajax开发 Ajax开发入门
Oct 14 Javascript
HTML Dom与Css控制方法
Oct 25 Javascript
jquery如何把参数列严格转换成数组实现思路
Apr 01 Javascript
jQuery中parentsUntil()方法用法实例
Jan 07 Javascript
如何编写一个完整的Angular4 FormText 组件
Nov 18 Javascript
JS实现点击按钮可实现编辑功能
Jul 03 Javascript
解决Layui 表单提交数据为空的问题
Aug 15 Javascript
深入浅析Vue 中 ref 的使用
Apr 29 Javascript
JointJS JavaScript流程图绘制框架解析
Aug 15 Javascript
layui的表单提交以及验证和修改弹框的实例
Sep 09 Javascript
使用Vue-scroller页面input框不能触发滑动的问题及解决方法
Aug 08 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 生成短网址原理及代码
2014/01/23 PHP
PHP中批量生成静态html(命令行下运行PHP)
2014/04/19 PHP
thinkPHP+ajax实现统计页面pv浏览量的方法
2017/03/15 PHP
Javascript 篱式条件判断
2008/08/22 Javascript
使用jQuery仿苹果官网焦点图特效
2014/12/23 Javascript
使用jquery动态加载js文件的方法
2014/12/24 Javascript
JS实现将Asp.Net的DateTime Json类型转换为标准时间的方法
2016/08/02 Javascript
浅谈Vue.js应用的四种AJAX请求数据模式
2017/08/30 Javascript
基于rollup的组件库打包体积优化小结
2018/06/18 Javascript
在create-react-app中使用css modules的示例代码
2018/07/31 Javascript
ES6知识点整理之函数数组参数的默认值及其解构应用示例
2019/04/17 Javascript
微信小程序用户授权、位置授权及获取微信绑定手机号
2019/07/18 Javascript
详解基于Vue/React项目的移动端适配方案
2019/08/23 Javascript
vue项目或网页上实现文字转换成语音播放功能
2020/06/09 Javascript
[01:13]2014DOTA2西雅图邀请赛 舌尖上的TI4
2014/07/08 DOTA
[01:25]2014DOTA2国际邀请赛 zhou分析LGD比赛情况
2014/07/14 DOTA
Python selenium实现微博自动登录的示例代码
2018/05/16 Python
tensorflow实现简单逻辑回归
2018/09/07 Python
python版百度语音识别功能
2019/07/09 Python
python pyecharts 实现一个文件绘制多张图
2020/05/13 Python
python实现学生成绩测评系统
2020/06/22 Python
利用css3如何设置没有上下边的列表间隔线
2017/07/03 HTML / CSS
利用css3径向渐变做一张优惠券的示例
2018/03/22 HTML / CSS
Mytheresa美国官网:德国知名的女性奢侈品电商
2017/05/27 全球购物
越南综合购物网站:Lazada越南
2019/06/10 全球购物
什么是事务?为什么需要事务?
2012/01/09 面试题
毕业生自荐书
2013/12/18 职场文书
国际金融专业大学生职业生涯规划书
2013/12/28 职场文书
超市中秋节活动方案
2014/02/12 职场文书
大学生励志演讲稿
2014/04/25 职场文书
祖国在我心中演讲稿400字
2014/05/04 职场文书
安全宣传标语口号
2014/06/06 职场文书
2014年教师批评与自我批评思想汇报
2014/09/20 职场文书
转让协议书
2015/01/27 职场文书
施工安全保证书
2015/05/09 职场文书
2015年生活老师工作总结
2015/05/27 职场文书