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中==与===操作符的比较
Mar 21 Javascript
jquery改变disabled的boolean状态的三种方法
Dec 13 Javascript
jquery bind(click)传参让列表中每行绑定一个事件
Aug 06 Javascript
Javascript 构造函数详解
Oct 22 Javascript
JavaScript三种绑定事件方式及相互之间的区别分析
Jan 10 Javascript
Javascript中return的使用与闭包详解
Jan 11 Javascript
微信小程序商城项目之商品属性分类(4)
Apr 17 Javascript
vue.js整合vux中的上拉加载下拉刷新实例教程
Jan 09 Javascript
详解vue中点击空白处隐藏div的实现(用指令实现)
Apr 19 Javascript
解决bootstrap-select 动态加载数据不显示的问题
Aug 10 Javascript
微信小程序使用wxParse解析html的实现示例
Aug 30 Javascript
Vue移动端用淘宝弹性布局lib-flexible插件做适配的方法
May 26 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更改目录及子目录下所有的文件后缀的代码
2010/09/24 PHP
《PHP编程最快明白》第五讲:php目录、文件操作
2010/11/01 PHP
微信利用PHP创建自定义菜单的方法
2016/08/01 PHP
分析php://output和php://stdout的区别
2018/05/06 PHP
Laravel 5.4前后台分离,通过不同的二级域名访问方法
2019/10/13 PHP
js可突破windows弹退效果代码
2008/08/09 Javascript
Js日期选择器并自动加入到输入框中示例代码
2013/08/02 Javascript
js数值和和字符串进行转换时可以对不同进制进行操作
2014/03/05 Javascript
jQuery遍历json的方法分析
2016/04/16 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
2016/11/03 Javascript
ionic3+Angular4实现接口请求及本地json文件读取示例
2017/10/11 Javascript
javascript深拷贝、浅拷贝和循环引用深入理解
2018/05/27 Javascript
jQuery实现炫丽的3d旋转星空效果
2018/07/04 jQuery
微信小程序中如何计算距离某个节日还有多少天
2019/07/15 Javascript
vue element-ui实现动态面包屑导航
2019/12/23 Javascript
深入解析Python中的WSGI接口
2015/05/11 Python
Python之读取TXT文件的方法小结
2018/04/27 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
Python内置异常类型全面汇总
2020/05/28 Python
python3.6.8 + pycharm + PyQt5 环境搭建的图文教程
2020/06/11 Python
Python获取android设备cpu和内存占用情况
2020/11/15 Python
python实现简单的学生管理系统
2021/02/22 Python
加拿大在线旅游公司:Flighthub
2019/03/11 全球购物
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
毕业生教师求职信
2013/10/20 职场文书
法学专业毕业生自荐信范文
2013/12/18 职场文书
家电业务员岗位职责
2014/03/10 职场文书
文秘应届生求职信
2014/07/05 职场文书
竞聘自述材料
2014/08/25 职场文书
部队反四风对照检查材料
2014/09/26 职场文书
医院领导班子四风问题对照检查材料
2014/10/26 职场文书
企业群众路线教育实践活动心得体会
2014/11/03 职场文书
投诉书范文
2015/07/02 职场文书
公文写作指导之倡议书!
2019/07/03 职场文书
Python实现对齐打印 format函数的用法
2022/04/28 Python
VMware虚拟机安装 Windows Server 2022的详细图文教程
2022/09/23 Servers