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复制到剪贴板示例代码
Oct 30 Javascript
JavaScript子类用Object.getPrototypeOf去调用父类方法解析
Dec 05 Javascript
Node.js node-schedule定时任务隔多少分钟执行一次的方法
Feb 10 Javascript
javascript实现确定和取消提示框效果
Jul 10 Javascript
js实现(全选)多选按钮的方法【附实例】
Mar 30 Javascript
JS简单实现禁止访问某个页面的方法
Sep 13 Javascript
浅谈Vue的基本应用
Dec 27 Javascript
easyui-edatagrid.js实现回车键结束编辑功能的实例
Apr 12 Javascript
JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】
Apr 24 Javascript
js实现添加删除表格(两种方法)
Apr 27 Javascript
关于Vue.nextTick()的正确使用方法浅析
Aug 25 Javascript
基于vuex实现购物车功能
Jan 10 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编程最快明白》第四讲:日期、表单接收、session、cookie
2010/11/01 PHP
域名和cookie问题(域名后缀)
2012/10/10 PHP
php带抄送和密件抄送的邮件发送方法
2015/03/20 PHP
网页自动跳转代码收集
2009/09/27 Javascript
jquery中one()方法的用法实例
2015/01/16 Javascript
JavaScript实现可拖拽的拖动层Div实例
2015/08/05 Javascript
javascript中undefined与null的区别
2015/08/16 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
JavaScript原生编写《飞机大战坦克》游戏完整实例
2017/01/04 Javascript
angularjs之$timeout指令详解
2017/06/13 Javascript
微信小程序实现下拉刷新和轮播图效果
2017/11/21 Javascript
vue.js 嵌套循环、if判断、动态删除的实例
2018/03/07 Javascript
Vue源码解读之Component组件注册的实现
2018/08/24 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
[01:12:53]完美世界DOTA2联赛PWL S2 Forest vs SZ 第一场 11.25
2020/11/26 DOTA
pandas带有重复索引操作方法
2018/06/08 Python
基于pycharm导入模块显示不存在的解决方法
2018/10/13 Python
python的内存管理和垃圾回收机制详解
2019/05/18 Python
用pyqt5 给按钮设置图标和css样式的方法
2019/06/24 Python
python连接PostgreSQL数据库的过程详解
2019/09/18 Python
详解基于python-django框架的支付宝支付案例
2019/09/23 Python
python3获取文件中url内容并下载代码实例
2019/12/27 Python
python爬虫工具例举说明
2020/11/30 Python
印度尼西亚最大和最全面的网络商城:Blibli.com
2017/10/04 全球购物
Weblogic和WebSphere不同特点
2012/05/09 面试题
高中生学习生活的自我评价
2013/10/09 职场文书
信息部岗位职责
2013/11/12 职场文书
银行职业规划书范文
2013/12/28 职场文书
个人自我鉴定总结
2014/03/25 职场文书
《金色的脚印》教后反思
2014/04/23 职场文书
心理健康日活动总结
2014/05/08 职场文书
缅怀革命先烈演讲稿
2014/05/14 职场文书
学雷锋日活动总结
2015/02/06 职场文书
答辩状格式范本
2015/05/22 职场文书
java设计模式--三种工厂模式详解
2021/07/21 Java/Android