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 sudoku 数独智力游戏生成代码
Mar 27 Javascript
探讨javascript是不是面向对象的语言
Nov 21 Javascript
javascript中定义私有方法说明(private method)
Jan 27 Javascript
JavaScript实现向OL列表内动态添加LI元素的方法
Mar 21 Javascript
javascript解三阶幻方(九宫格)
Apr 22 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
Mar 08 Javascript
基于javascript实现最简单的选项卡切换效果
May 16 Javascript
vue.js中指令Directives详解
Mar 20 Javascript
微信小程序使用二次贝塞尔曲线画波浪
Dec 25 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
Aug 02 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
Oct 26 Javascript
JavaScript 获取滚动条位置并将页面滑动到锚点
Feb 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
AJAX for PHP简单表数据查询实例
2007/01/02 PHP
php堆排序(heapsort)练习
2013/11/13 PHP
php中smarty模板条件判断用法实例
2015/06/11 PHP
php中遍历二维数组并以表格的形式输出的方法
2017/01/03 PHP
javascript比较两个日期的先后示例代码
2014/12/31 Javascript
javascript正则表达式使用replace()替换手机号的方法
2015/01/19 Javascript
jQuery使用attr()方法同时设置多个属性值用法实例
2015/03/26 Javascript
全面了解JavaScirpt 的垃圾(garbage collection)回收机制
2016/07/11 Javascript
快速入门Vue
2016/12/19 Javascript
微信小程序 共用变量值的实现
2017/07/12 Javascript
解决vue接口数据赋值给data没有反应的问题
2018/08/27 Javascript
vue-cli3.0 脚手架搭建项目的过程详解
2018/10/19 Javascript
Layui给switch添加响应事件的例子
2019/09/03 Javascript
javascript 对象 与 prototype 原型用法实例分析
2019/11/11 Javascript
js判断浏览器的环境(pc端,移动端,还是微信浏览器)
2020/12/24 Javascript
vue print.js打印支持Echarts图表操作
2020/11/13 Javascript
Python isinstance函数介绍
2015/04/14 Python
Python实现统计文本文件字数的方法
2017/05/05 Python
Python的地形三维可视化Matplotlib和gdal使用实例
2017/12/09 Python
Python爬虫番外篇之Cookie和Session详解
2017/12/27 Python
使用python将mysql数据库的数据转换为json数据的方法
2019/07/01 Python
Python 的AES加密与解密实现
2019/07/09 Python
python读取大文件越来越慢的原因与解决
2019/08/08 Python
python环境下安装opencv库的方法
2020/03/05 Python
html5 Canvas画图教程(3)—canvas出现1像素线条模糊不清的原因
2013/01/09 HTML / CSS
美国帽子俱乐部商店:Hat Club
2019/07/05 全球购物
传播学毕业生求职信
2013/10/11 职场文书
担保书怎么写
2014/04/01 职场文书
电子商务助理求职自荐信
2014/04/10 职场文书
新闻人物通讯稿
2014/10/09 职场文书
上下班时间调整通知
2015/04/23 职场文书
生产现场禁烟通知
2015/04/23 职场文书
详解Python 3.10 中的新功能和变化
2021/04/28 Python
使用react-virtualized实现图片动态高度长列表的问题
2021/05/28 Javascript
分享一些Java的常用工具
2021/06/11 Java/Android
36个正则表达式(开发效率提高80%)
2021/11/17 Javascript