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插件[鼠标悬浮时候 出现说明label]
Jun 27 Javascript
js 取时间差去掉周六周日实现代码
Dec 25 Javascript
js获取select默认选中的Option并不是当前选中值
May 07 Javascript
js实现键盘操作实现div的移动或改变的原理及代码
Jun 23 Javascript
浅谈JQuery+ajax+jsonp 跨域访问
Jun 25 Javascript
JavaScript数据结构之二叉查找树的定义与表示方法
Apr 12 Javascript
jQuery实现frame之间互通的方法
Jun 26 jQuery
浅析Node.js非对称加密方法
Jan 29 Javascript
解决layui前端框架 form表单,table表等内置控件不显示的问题
Aug 19 Javascript
vue中el-upload上传图片到七牛的示例代码
Oct 19 Javascript
微信小程序开发技巧汇总
Jul 15 Javascript
JS实现简易留言板增删功能
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
第八节--访问方式
2006/11/16 PHP
PHP内核介绍及扩展开发指南―基础知识
2011/09/11 PHP
php代码书写习惯优化小结
2013/06/20 PHP
ThinkPHP框架设计及扩展详解
2014/11/25 PHP
php的ddos攻击解决方法
2015/01/08 PHP
PHP+swoole实现简单多人在线聊天群发
2016/01/19 PHP
thinkphp5实现无限级分类
2019/02/18 PHP
PHP批斗大会之缺失的异常详解
2019/07/09 PHP
JavaScript 计算当天是本年本月的第几周
2009/03/22 Javascript
extjs 学习笔记(二) Ext.Element类
2009/10/13 Javascript
使用js 设置url参数
2013/07/08 Javascript
JS实现随机化快速排序的实例代码
2013/08/01 Javascript
jquery动态分页效果堪比时光网
2014/09/25 Javascript
JQuery中attr方法和removeAttr方法用法实例
2015/05/18 Javascript
JavaScript的jQuery库中ready方法的学习教程
2015/08/14 Javascript
JavaScript设计模式初探
2016/01/07 Javascript
jQuery简单实现title提示效果示例
2016/08/01 Javascript
jQuery实现图片轮播效果代码
2016/09/27 Javascript
深入理解vue-router之keep-alive
2017/08/31 Javascript
深入浅析javascript继承体系
2017/10/23 Javascript
bootstrap 弹出框modal添加垂直方向滚轴效果
2018/07/09 Javascript
layui获取多选框中的值方法
2018/08/15 Javascript
Angularjs之ngModel中的值验证绑定方法
2018/09/13 Javascript
Electron vue的使用教程图文详解
2019/07/05 Javascript
vuejs实现下拉框菜单选择
2020/10/23 Javascript
python 自动提交和抓取网页
2009/07/13 Python
Python ATM功能实现代码实例
2020/03/19 Python
python excel和yaml文件的读取封装
2021/01/12 Python
方太官方网上商城:销售方太抽油烟机、燃气灶、消毒柜等
2017/01/17 全球购物
如何整合JQuery和Prototype
2014/01/31 面试题
师范教师大学生职业生涯规划范文
2014/01/05 职场文书
事业单位竞聘上岗实施方案
2014/03/28 职场文书
逃课检讨书范文
2015/05/06 职场文书
奖学金主要事迹范文
2015/11/04 职场文书
Redis分布式锁的7种实现
2022/04/01 Redis
vue postcss-px2rem 自适应布局
2022/05/15 Vue.js