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阻止同类型事件小结
Apr 19 Javascript
使用js 设置url参数
Jul 08 Javascript
使用javascript做的一个随机点名程序
Feb 13 Javascript
javascript中eval解析JSON字符串
Feb 27 Javascript
JavaScript实现页面跳转的方式汇总
May 16 Javascript
利用jquery实现下拉框的禁用与启用
Dec 07 Javascript
微信小程序开发之相册选择和拍照详解及实例代码
Feb 22 Javascript
node.js入门学习之url模块
Feb 25 Javascript
JavaScript实现二叉树的先序、中序及后序遍历方法详解
Oct 26 Javascript
为什么使用koa2搭建微信第三方公众平台的原因
May 16 Javascript
vue2中引用及使用 better-scroll的方法详解
Nov 15 Javascript
jQuery实现简单日历效果
Jul 05 jQuery
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中file_exists与is_file,is_dir的区别介绍
2012/09/12 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
2014/07/29 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
PHP生成条形码大揭秘
2015/09/24 PHP
php flush无效,IIS7下php实时输出的方法
2016/08/25 PHP
Thinkphp框架中D方法与M方法的区别
2016/12/23 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
PHP设计模式(八)装饰器模式Decorator实例详解【结构型】
2020/05/02 PHP
Js操作Select大全(取值、设置选中等等)
2013/10/29 Javascript
jquery form 隐藏的input 选择
2014/04/29 Javascript
分享一个常用的javascript静态类
2014/12/31 Javascript
浅谈JavaScript数据类型及转换
2015/02/28 Javascript
jQuery鼠标悬浮链接弹出跟随图片实例代码
2016/01/08 Javascript
jQuery bt气泡实现悬停显示及移开隐藏功能的方法
2016/07/12 Javascript
js点击按钮实现水波纹效果代码(CSS3和Canves)
2016/09/15 Javascript
js实现表单提交后不重新刷新当前页面
2016/11/30 Javascript
Javascript oop设计模式 面向对象编程简单实例介绍
2016/12/13 Javascript
基于pako.js实现gzip的压缩和解压功能示例
2017/06/13 Javascript
详解给Vue2路由导航钩子和axios拦截器做个封装
2018/04/10 Javascript
vue.js轮播图组件使用方法详解
2018/07/03 Javascript
vue-better-scroll 的使用实例代码详解
2018/12/03 Javascript
[04:42]5分钟带你了解什么是DOTA2(第一期)
2017/02/07 DOTA
用Python编写简单的定时器的方法
2015/05/02 Python
python函数中将变量名转换成字符串实例
2020/05/11 Python
python/golang 删除链表中的元素
2020/09/14 Python
python 实现ping测试延迟的两种方法
2020/12/10 Python
耐克美国官网:Nike.com
2016/08/01 全球购物
HUGO BOSS美国官方网上商店:世界知名奢侈品牌
2017/08/04 全球购物
沃达丰英国有限公司:Vodafone英国
2019/04/16 全球购物
俞敏洪一分钟演讲稿
2014/08/26 职场文书
倡议书的写法
2014/08/30 职场文书
教师群众路线心得体会
2014/11/04 职场文书
质量保证书格式模板
2015/02/27 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
Python入门之使用pandas分析excel数据
2021/05/12 Python