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 相关文章推荐
浅析jQuery中常用的元素查找方法总结
Jul 04 Javascript
Jquery图片延迟加载插件jquery.lazyload.js的使用方法
May 21 Javascript
JavaScript中的立即执行函数表达式介绍
Mar 15 Javascript
JS实现从网页顶部掉下弹出层效果的方法
Aug 06 Javascript
轻松实现js图片预览功能
Jan 18 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
Aug 17 Javascript
轻松掌握JavaScript策略模式
Aug 25 Javascript
jQuery实现为LI列表前3行设置样式的方法【2种方法】
Sep 04 Javascript
vue调试工具vue-devtools安装及使用方法
Nov 07 Javascript
JS随机密码生成算法
Sep 23 Javascript
JavaScript如何把两个数组对象合并过程解析
Oct 10 Javascript
何时使用Map来代替普通的JS对象
Apr 29 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中对缓冲区的控制实现代码
2013/09/29 PHP
PHP实现对文本数据库的常用操作方法实例演示
2014/07/04 PHP
PHP图像识别技术原理与实现
2016/10/27 PHP
PHP输出XML格式数据的方法总结
2017/02/08 PHP
对xmlHttp对象方法和属性的理解
2011/01/17 Javascript
通过JavaScript控制字体大小的代码
2011/10/04 Javascript
js中有关IE版本检测
2012/01/04 Javascript
js关闭浏览器窗口及检查浏览器关闭事件
2013/09/03 Javascript
javascript实现页面刷新时自动清空表单并选中的方法
2015/07/18 Javascript
JS模拟Dialog弹出浮动框效果代码
2015/10/16 Javascript
深入浅析JavaScript中的constructor
2016/04/19 Javascript
AngularJs学习第八篇 过滤器filter创建
2016/06/08 Javascript
JS开发中百度地图+城市联动实现实时触发查询地址功能
2017/04/13 Javascript
webpack2.0配置postcss-loader的方法
2017/08/17 Javascript
Vue.js 表单控件操作小结
2018/03/29 Javascript
JS/HTML5游戏常用算法之碰撞检测 包围盒检测算法详解【凹多边形的分离轴检测算法】
2018/12/13 Javascript
从0到1构建vueSSR项目之node以及vue-cli3的配置
2019/03/07 Javascript
Vue.js@2.6.10更新内置错误处机制Fundebug同步支持相应错误监控
2019/05/13 Javascript
ES6 Class中实现私有属性的一些方法总结
2019/07/08 Javascript
vue实现select下拉显示隐藏功能
2019/09/30 Javascript
微信小程序如何实现五星评价功能
2019/10/15 Javascript
layui 数据表格 根据值(1=业务,2=机构)显示中文名称示例
2019/10/26 Javascript
vue实现随机验证码功能(完整代码)
2019/12/10 Javascript
解决vue请求接口第一次成功,第二次失败问题
2020/09/08 Javascript
Python开发之快速搭建自动回复微信公众号功能
2016/04/22 Python
Python解决抛小球问题 求小球下落经历的距离之和示例
2018/02/01 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
2019/05/04 Python
新西兰航空中国官网:Air New Zealand China
2018/07/24 全球购物
单位创先争优活动方案
2014/01/26 职场文书
公司承诺书怎么写
2014/05/24 职场文书
职工培训工作总结
2015/08/10 职场文书
关于公司年会的开幕词
2016/03/04 职场文书
2019请假条的基本格式及范文!
2019/07/05 职场文书
担保书范文
2019/07/09 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书
尝试使用Python爬取城市租房信息
2022/04/12 Python