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 得到变量类型的函数
May 19 Javascript
jquery datatable后台封装数据示例代码
Aug 07 Javascript
jQuery中:input选择器用法实例
Jan 03 Javascript
JQuery给网页更换皮肤的方法
May 30 Javascript
详解JavaScript编程中的数组结构
Oct 24 Javascript
JQuery.Ajax()的data参数类型实例详解
Nov 20 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
Jan 18 Javascript
vue中路由参数传递可能会遇到的坑
Dec 07 Javascript
详解vue-video-player使用心得(兼容m3u8)
Aug 23 Javascript
vue+element-ui表格封装tag标签使用插槽
Jun 18 Javascript
ElementUI 修改默认样式的几种办法(小结)
Jul 29 Javascript
vue监听滚动事件的方法
Dec 21 Vue.js
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 中的输出缓冲
2006/12/21 PHP
PHP实现的XXTEA加密解密算法示例
2018/08/28 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
javascript cookies操作集合
2010/04/12 Javascript
JS实现从表格中动态删除指定行的方法
2015/03/31 Javascript
深入理解JavaScript编程中的原型概念
2015/06/25 Javascript
Jquery 垂直多级手风琴菜单附源码下载
2015/11/17 Javascript
js获取上传文件的绝对路径实现方法
2016/08/02 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
2017/08/08 jQuery
Angular中响应式表单的三种更新值方法详析
2017/08/22 Javascript
详解http访问解析流程原理
2017/10/18 Javascript
JavaScript 中定义函数用 var foo = function () {} 和 function foo()区别介绍
2018/03/01 Javascript
vue 组件的封装之基于axios的ajax请求方法
2018/08/11 Javascript
原生JS实现的自动轮播图功能详解
2018/12/28 Javascript
javascript实现的字符串转换成数组操作示例
2019/06/13 Javascript
layui表格数据复选框回显设置方法
2019/09/13 Javascript
Python 自动补全(vim)
2014/11/30 Python
Python基础之getpass模块详细介绍
2017/08/10 Python
Python动态生成多维数组的方法示例
2018/08/09 Python
东方电视购物:东方CJ
2016/10/12 全球购物
Big Green Smile德国网上商店:提供各种天然产品
2018/05/23 全球购物
介绍一下Java的安全机制
2012/06/28 面试题
linux面试题参考答案(10)
2013/11/04 面试题
2014年开学第一课活动方案
2014/03/06 职场文书
《鸿门宴》教学反思
2014/04/22 职场文书
纪念九一八事变83周年国旗下讲话稿
2014/09/15 职场文书
自我检讨报告
2015/01/28 职场文书
元宵节晚会主持词
2015/07/01 职场文书
再见,2019我们不负使命;你好,2020我们砥砺前行
2020/01/03 职场文书
《分一些蚊子进来》读后感3篇
2020/01/09 职场文书
Python标准库之typing的用法(类型标注)
2021/06/02 Python
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android
Nginx+Tomcat负载均衡多实例详解
2022/04/11 Servers
IIS服务器中设置HTTP重定向访问HTTPS
2022/04/29 Servers
Go语言编译原理之变量捕获
2022/08/05 Golang