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 相关文章推荐
点击广告后才能获得下载地址
Oct 26 Javascript
javascript的console.log()用法小结
May 31 Javascript
Jquery 模板数据绑定插件的使用方法详解
Jul 08 Javascript
js中的hasOwnProperty和isPrototypeOf方法使用实例
Jun 06 Javascript
基于javascript实现checkbox复选框实例代码
Jan 28 Javascript
JavaScript实现字符串与日期的互相转换及日期的格式化
Mar 07 Javascript
jQuery简介_动力节点Java学院整理
Jul 04 jQuery
jQuery实现table中两列CheckBox只能选中一个的示例
Sep 22 jQuery
解决layui弹框失效的问题
Sep 09 Javascript
Vue父组件向子组件传值以及data和props的区别详解
Mar 02 Javascript
javascript贪吃蛇游戏设计与实现
Sep 17 Javascript
vue-cli中实现响应式布局的方法
Mar 02 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基于MySQL数据库实现对象持久层的方法
2015/06/17 PHP
php微信公众平台开发之微信群发信息
2016/09/13 PHP
php打开本地exe程序,js打开本地exe应用程序,并传递相关参数方法
2018/02/06 PHP
Yii框架核心组件类实例详解
2019/08/06 PHP
xtree.js 代码
2007/03/13 Javascript
jQuery get和post 方法传值注意事项
2009/11/03 Javascript
AngularJs Forms详解及简单示例
2016/09/01 Javascript
bootstrap选项卡使用方法解析
2017/01/11 Javascript
jquery mobile移动端幻灯片滑动切换效果
2020/04/15 Javascript
从零开始学习Node.js系列教程五:服务器监听方法示例
2017/04/13 Javascript
微信小程序实现拖拽 image 触摸事件监听的实例
2017/08/17 Javascript
微信小程序商品详情页的底部弹出框效果
2020/11/16 Javascript
Python中的自省(反射)详解
2015/06/02 Python
Python使用pygame模块编写俄罗斯方块游戏的代码实例
2015/12/08 Python
Python selenium文件上传方法汇总
2020/11/19 Python
python 采集中文乱码问题的完美解决方法
2016/09/27 Python
Python3网络爬虫之使用User Agent和代理IP隐藏身份
2017/11/23 Python
Python使用Scrapy保存控制台信息到文本解析
2017/12/27 Python
pygame实现贪吃蛇游戏(下)
2019/10/29 Python
解决Ubuntu18中的pycharm不能调用tensorflow-gpu的问题
2020/09/17 Python
python基于pygame实现飞机大作战小游戏
2020/11/19 Python
Django使用django-simple-captcha做验证码的实现示例
2021/01/07 Python
英国领先的狗和宠物美容专家:Christies Direct
2017/04/03 全球购物
台湾前三大B2C购物网站:MOMO购物网
2017/04/27 全球购物
会计与审计专业大专生求职信
2013/10/03 职场文书
俄语专业毕业生推荐信
2013/10/28 职场文书
设计师求职信
2014/07/01 职场文书
个人诉讼委托书范本
2014/10/17 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
税务会计岗位职责
2015/04/02 职场文书
mysql部分操作
2021/04/05 MySQL
数据库之SQL技巧整理案例
2021/07/07 SQL Server
Go中的条件语句Switch示例详解
2021/08/23 Golang
在 HTML 页面中使用 React的场景分析
2022/01/18 Javascript
mysql 8.0.27 绿色解压版安装教程及配置方法
2022/04/20 MySQL
Linux下搭建SFTP服务器的命令详解
2022/06/25 Servers