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 - HTML的request类
Jul 15 Javascript
js离开或刷新页面检测(且兼容FF,IE,Chrome)
Mar 05 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
Feb 18 Javascript
关于Jquery中的事件绑定总结
Oct 26 Javascript
jQuery根据ID、CLASS、等获取对象的实例
Dec 04 Javascript
详解Angular的内置过滤器和自定义过滤器【推荐】
Dec 26 Javascript
vue脚手架中配置Sass的方法
Jan 04 Javascript
解决vue项目报错webpackJsonp is not defined问题
Mar 14 Javascript
详解如何写出一个利于扩展的vue路由配置
May 16 Javascript
基于ssm框架实现layui分页效果
Jul 27 Javascript
JavaScript实现简单日历效果
Sep 11 Javascript
比较node.js和Deno
Apr 27 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 数组遍历的差异(array_diff 的实现)
2008/03/23 PHP
php报表之jpgraph柱状图实例代码
2011/08/22 PHP
ThinkPHP模板Switch标签用法示例
2014/06/30 PHP
yii添删改查实例
2015/11/16 PHP
浅谈laravel5.5 belongsToMany自身的正确用法
2019/10/17 PHP
JQuery 动态扩展对象之另类视角
2010/05/25 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
JS判断页面加载状态以及添加遮罩和缓冲动画的代码
2012/10/11 Javascript
Javascript学习笔记之数组的遍历和 length 属性
2014/11/23 Javascript
jQuery实现灰蓝风格标准二级下拉菜单效果代码
2015/08/31 Javascript
详解Bootstrap glyphicons字体图标
2016/01/04 Javascript
Centos7 中 Node.js安装简单方法
2016/11/02 Javascript
使用Require.js封装原生js轮播图的实现代码
2017/06/15 Javascript
jQuery层级选择器_动力节点节点Java学院整理
2017/07/04 jQuery
php 解压zip压缩包内容到指定目录的实例
2018/01/23 Javascript
Express下采用bcryptjs进行密码加密的方法
2018/02/07 Javascript
vue使用微信JS-SDK实现分享功能
2019/08/23 Javascript
详解Vue中Axios封装API接口的思路及方法
2020/10/10 Javascript
Node.js中的异步生成器与异步迭代详解
2021/01/31 Javascript
python操作mysql中文显示乱码的解决方法
2014/10/11 Python
python sort、sorted高级排序技巧
2014/11/21 Python
Python使用到第三方库PyMuPDF图片与pdf相互转换
2019/05/03 Python
Python3之手动创建迭代器的实例代码
2019/05/22 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
python ctypes库2_指定参数类型和返回类型详解
2019/11/19 Python
HTML5之tabindex属性全面解析
2016/07/07 HTML / CSS
飞利浦法国官网:Philips法国
2019/07/10 全球购物
Timberland澳大利亚官网:全球领先的户外品牌
2019/12/10 全球购物
PHP面试题大全
2015/10/16 面试题
前台接待岗位职责
2013/12/03 职场文书
绿化先进工作者事迹材料
2014/01/30 职场文书
2014年领班工作总结
2014/11/25 职场文书
常务副总经理岗位职责
2015/02/02 职场文书
环卫工人慰问信
2015/02/15 职场文书
会计求职自荐信
2015/03/26 职场文书
2019年描写人生经典诗句大全
2019/07/08 职场文书