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 多种搜索引擎集成的页面实现代码
Jan 02 Javascript
js中的preventDefault与stopPropagation详解
Jan 29 Javascript
ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)
Aug 30 Javascript
浅谈Javascript Base64 加密解密
Dec 28 Javascript
js同源策略详解
May 21 Javascript
JavaScript实现显示函数调用堆栈的方法
Apr 21 Javascript
AngularJS 中的Promise --- $q服务详解
Sep 14 Javascript
微信小程序 picker-view 组件详解及简单实例
Jan 10 Javascript
js获取地址栏中传递的参数(两种方法)
Feb 08 Javascript
JavaScript30 一个月纯 JS 挑战中文指南(英文全集)
Jul 23 Javascript
一个Vue视频媒体多段裁剪组件的实现示例
Aug 09 Javascript
使用Canvas绘制一个游戏人物属性图
Mar 25 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 $_FILES中error返回值详解
2014/01/30 PHP
PHP获取一年有几周以及每周开始日期和结束日期
2015/08/06 PHP
php版微信公众号接口实现发红包的方法
2016/10/14 PHP
拖动一个HTML元素
2006/12/22 Javascript
使用JavaScript 实现各种跨域的方法
2013/05/08 Javascript
基于JQuery实现滚动到页面底端时自动加载更多信息
2014/01/31 Javascript
AngularJS中实现动画效果的方法
2016/07/28 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
基于angular实现三级联动的生日插件
2017/05/12 Javascript
浅谈Vue.js 1.x 和 2.x 实例的生命周期
2017/07/25 Javascript
关于vuejs中v-if和v-show的区别及v-show不起作用问题
2018/03/26 Javascript
微信小程序form表单组件示例代码
2018/07/15 Javascript
JavaScript实现简单音乐播放器
2020/04/17 Javascript
基于Vue-Cli 打包自动生成/抽离相关配置文件的实现方法
2018/12/09 Javascript
基于vue如何发布一个npm包的方法步骤
2019/05/15 Javascript
详解JavaScript的this指向和绑定
2020/09/08 Javascript
jdk1.8+vue elementui实现多级菜单功能
2020/09/24 Javascript
ant design vue datepicker日期选择器中文化操作
2020/10/28 Javascript
[46:43]DOTA2上海特级锦标赛主赛事日 - 1 胜者组第一轮#2LGD VS MVP.Phx第二局
2016/03/02 DOTA
[01:10]DOTA2 Supermajor:英雄,由我们见证
2018/05/14 DOTA
python中的对象拷贝示例 python引用传递
2014/01/23 Python
Python使用稀疏矩阵节省内存实例
2014/06/27 Python
python字典操作实例详解
2017/11/16 Python
python+pygame简单画板实现代码实例
2017/12/13 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
Flask框架信号用法实例分析
2018/07/24 Python
Python实现多态、协议和鸭子类型的代码详解
2019/05/05 Python
Python3 使用selenium插件爬取苏宁商家联系电话
2019/12/23 Python
Python解释器以及PyCharm的安装教程图文详解
2020/02/26 Python
html5使用canvas绘制一张图片
2014/12/15 HTML / CSS
匈牙利超级网上商店和优惠:Alza.hu
2019/12/17 全球购物
协议书范本
2014/04/23 职场文书
党的群众路线教育实践方案
2014/05/11 职场文书
汽车技术服务与贸易专业求职信
2014/07/20 职场文书
金砖之国观后感
2015/06/11 职场文书
MySQL复制问题的三个参数分析
2021/04/07 MySQL