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 相关文章推荐
Javascript 命名空间模式
Nov 01 Javascript
用javascript添加控件自定义属性解析
Nov 25 Javascript
全面解析Bootstrap表单使用方法(表单控件)
Nov 24 Javascript
Node.js Addons翻译(C/C++扩展)
Jun 12 Javascript
JavaScript切换搜索引擎的导航网页搜索框实例代码
Jun 11 Javascript
Node调用Java的示例代码
Sep 20 Javascript
JavaScript 有用的代码片段和 trick
Feb 22 Javascript
vue自定义指令的创建和使用方法实例分析
Dec 04 Javascript
Vue实例的对象参数options的几个常用选项详解
Nov 08 Javascript
有关vue 开发钉钉 H5 微应用 dd.ready() 不执行问题及快速解决方案
May 09 Javascript
javascript canvas封装动态时钟
Sep 30 Javascript
JS实现简易日历效果
Jan 25 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
phpBB BBcode处理的漏洞
2006/10/09 PHP
PHP CKEditor 上传图片实现代码
2009/11/06 PHP
php采集文章中的图片获取替换到本地(实现代码)
2013/07/08 PHP
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
ThinkPHP3.1之D方法实例详解
2014/06/20 PHP
PHP中new static() 和 new self() 的区别介绍
2015/01/09 PHP
php实现读取内存顺序号
2015/03/29 PHP
php正则表达式获取内容所有链接
2015/07/24 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
2019/08/30 PHP
laravel 关联关系遍历数组的例子
2019/10/10 PHP
thinkphp框架实现路由重定义简化url访问地址的方法分析
2020/04/04 PHP
javascript背投广告代码的完善
2008/04/08 Javascript
关于图片的预加载过程中隐藏未知的
2012/12/19 Javascript
javascript怎么禁用浏览器后退按钮
2014/03/27 Javascript
javascript带回调函数的异步脚本载入方法实例分析
2015/07/02 Javascript
微信小程序之分享页面如何返回首页的示例
2018/03/28 Javascript
vue19 组建 Vue.extend component、组件模版、动态组件 的实例代码
2019/04/04 Javascript
[51:17]Mski vs VGJ.S Supermajor小组赛C组 BO3 第三场 6.3
2018/06/04 DOTA
python列表与元组详解实例
2013/11/01 Python
使用python实现strcmp函数功能示例
2014/03/25 Python
python实现隐马尔科夫模型HMM
2018/03/25 Python
python实现随机漫步方法和原理
2019/06/10 Python
python3.6编写的单元测试示例
2019/08/17 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
Django自带的加密算法及加密模块详解
2019/12/03 Python
谈谈Python:为什么类中的私有属性可以在外部赋值并访问
2020/03/05 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
2021/03/02 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
英国儿童图书网站:Scholastic
2017/03/26 全球购物
路德维希•贝克(LUDWIG BECK)中文官网:德国大型美妆百货
2020/09/19 全球购物
《青山处处埋忠骨》教学反思
2014/04/22 职场文书
电子商务专业求职信
2014/07/10 职场文书
学校元旦晚会开场白
2015/05/29 职场文书
运动会800米赞词
2015/07/22 职场文书
为什么代码规范要求SQL语句不要过多的join
2021/06/23 MySQL
Java中的随机数Random
2022/03/17 Java/Android