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静态的url如何传递
May 03 Javascript
JQuery 获得绝对,相对位置的坐标方法
Feb 09 Javascript
javascript 设计模式之单体模式 面向对象学习基础
Apr 18 Javascript
分享几个超级震憾的图片特效
Jan 08 Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
Jun 27 Javascript
JavaScript中的函数嵌套使用
Jun 04 Javascript
分享网页检测摇一摇实例代码
Jan 14 Javascript
JavaScript编写带旋转+线条干扰的验证码脚本实例
May 30 Javascript
JS获得一个对象的所有属性和方法实例
Feb 21 Javascript
微信小程序 判断手机号的实现代码
Apr 19 Javascript
浅谈vue引入css,less遇到的坑和解决方法
Jan 20 Javascript
js中的数组对象排序分析
Dec 11 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/10/09 PHP
php使用session二维数组实例
2014/11/06 PHP
PHP Echo字符串的连接格式
2016/03/07 PHP
php获取文件后缀的9种方法
2016/03/22 PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
2016/11/10 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
2019/11/09 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
php gethostbyname获取域名ip地址函数详解
2010/01/24 Javascript
JS实现字符串转日期并比较大小实例分析
2015/12/09 Javascript
轻松搞定jQuery.noConflict()
2016/02/15 Javascript
JS中script标签defer和async属性的区别详解
2016/08/12 Javascript
jquery popupDialog 使用 加载jsp页面的方法
2016/10/25 Javascript
如何快速上手Vuex
2017/02/14 Javascript
Vue-cli创建项目从单页面到多页面的方法
2017/09/20 Javascript
bootstrap paginator分页插件的两种使用方式实例详解
2017/11/14 Javascript
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
[51:32]Optic vs Serenity 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
从零学Python之入门(四)运算
2014/05/27 Python
python中尾递归用法实例详解
2015/04/28 Python
用C++封装MySQL的API的教程
2015/05/06 Python
python 判断网络连通的实现方法
2018/04/22 Python
python 移动图片到另外一个文件夹的实例
2019/01/10 Python
Windows下实现将Pascal VOC转化为TFRecords
2020/02/17 Python
Python函数默认参数常见问题及解决方案
2020/03/26 Python
Python3通过chmod修改目录或文件权限的方法示例
2020/06/08 Python
Python调用jar包方法实现过程解析
2020/08/11 Python
教你如何一步一步用Canvas写一个贪吃蛇
2018/10/22 HTML / CSS
html5菜单折纸效果
2014/04/22 HTML / CSS
临床医学专业毕业生的自我评价
2013/10/17 职场文书
青年创业培训欢迎词
2014/01/08 职场文书
十佳护士获奖感言
2014/02/18 职场文书
公司承诺书范文
2014/05/19 职场文书
因身体原因离职的辞职信范文
2015/05/12 职场文书
2015年度工程师评职称工作总结
2015/10/14 职场文书
关于MySQL中的 like操作符详情
2021/11/17 MySQL
《王国之心》迎来了发售的20周年, 野村哲发布贺图
2022/04/11 其他游戏