什么是纯函数,JavaScript函数式编程的基础

简介: 云栖号资讯:【点击查看更多行业资讯】在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 导读:什么是 OAM?2019 年 10 月 17 日,阿里巴巴合伙人、阿里云智能基础产品事业部总经理蒋江伟(花名:小邪)在 QCon 上海 2019 重磅宣布,阿里云与微软联合推出开放应用模型 Open Application Model (OAM)开源项目。

云栖号资讯:【点击查看更多行业资讯
在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来!


纯函数是所有函数式编程语言中使用的概念,这是一个非常重要的概念,因为它是函数式编程的基础,它允许你创建简单和复杂的组合模式。
纯函数背后的数学术语我就不说了,我直接说说说它们是什么以及它们的样子。

你可以确定满足以下条件的函数是纯函数:

  • 它应始终返回相同的值。不管调用该函数多少次,无论今天、明天还是将来某个时候调用它。
  • 自包含(不使用全局变量)。
  • 它不应修改程序的状态或引起副作用(修改全局变量)。

第一个条件:应始终返回相同的值

以以下功能为例

1

无论今天,明天还是将来某个时间调用 Math.cos(0)  都没关系,输出始终为1。我们来看一个新的例子

2

add函数也会发生同样的事情,不管调用该函数多少次或何时调用该函数,每次输出都相同。

现在,我们来看一个随时间或每次调用而变化的函数:

3

如你所见,每次调用 Math.random() 时,输出都会改变,因此我们不能说 Math.random() 是纯函数。

第二标准:自包含

通过使用非纯函数,这个标准也很容易理解,所以让我们看看非纯函数是什么样子的:

4

从上一个示例可以看到,函数 addApplesToTotal 使用的是上面定义的变量,它不是传递 numberOfApples 的值,而是直接访问外部范围。因此,addApplesToTotal 不是自包含的。

第三个条件:它不应修改程序的状态或引起副作用

与前面的标准一样,可以使用非纯函数很好地演示这个标准。我们来看一下 👀

5

你能从前面的不纯函数中注意到什么?它打破了前面的两个标准!!

  • 它正在访问外部作用域,因此它不是自包含的。
  • 它正在引起副作用,因为它改变了 totalApples 的值。

为什么纯函数很重要?

  • 纯函数不那么复杂
  • 更容易调试 🐛
  • 易于组合
  • 易于并行化

总结

纯函数是函数编程中一个基本但功能强大的概念。学习和习惯纯函数可以使你更轻松地测试和调试代码。它们将允许你学习关于函数式编程的更复杂的知识。

【云栖号在线课堂】每天都有产品技术专家分享!
课程地址:https://yqh.aliyun.com/live

立即加入社群,与专家面对面,及时了解课程最新动态!
【云栖号在线课堂 社群】https://c.tb.cn/F3.Z8gvnK

原文发布时间:2020-05-13
本文作者:杜尼卜
本文来自:“掘金”,了解相关信息可以关注“掘金”

相关文章
|
2月前
|
前端开发 JavaScript 开发者
揭秘JavaScript魔法三剑客:call、apply、bind,解锁函数新世界,你的前端之路因它们而精彩!
【8月更文挑战第23天】在 JavaScript 的世界里,`call`、`apply` 和 `bind` 这三个方法常常让新手感到困惑。它们都能改变函数执行时的上下文(即 `this` 的指向),但各有特点:`call` 接受一系列参数并直接调用函数;`apply` 则接收一个参数数组,在处理不确定数量的参数时特别有用;而 `bind` 不会立即执行函数,而是创建一个新版本的函数,其 `this` 上下文已被永久绑定。理解这三个方法能帮助开发者更好地运用函数式编程技巧,提升代码灵活性和可维护性。
29 0
|
6天前
|
JavaScript 前端开发 安全
JavaScript函数详解
JavaScript函数的详细解析,包括函数的定义和调用方式(如一般格式、匿名函数、构造函数、自调用函数、箭头函数和严格模式)、函数参数(arguments对象、可变参数、默认参数值)、闭包的概念和应用实例。
JavaScript函数详解
|
5天前
|
JavaScript 前端开发
JavaScript函数可以返回两个值
JavaScript函数可以返回两个值
|
1月前
|
JavaScript 前端开发
JavaScript基础知识-函数的返回值
关于JavaScript函数返回值的基础知识。
23 9
JavaScript基础知识-函数的返回值
|
5天前
|
自然语言处理 分布式计算 JavaScript
JavaScript函数
JavaScript函数
|
15天前
|
JSON JavaScript 前端开发
JavaScript第五天(函数,this,严格模式,高阶函数,闭包,递归,正则,ES6)高级
JavaScript第五天(函数,this,严格模式,高阶函数,闭包,递归,正则,ES6)高级
|
8天前
|
JSON JavaScript 数据格式
手写JS实现深拷贝函数
本文介绍了如何实现一个深拷贝函数`deepClone`,该函数可以处理对象和数组的深拷贝,确保拷贝后的对象与原始对象在内存中互不干扰。通过递归处理对象的键值对和数组的元素,实现了深度复制,同时保留了函数类型的值和基础类型的值。
15 3
|
1月前
|
JavaScript 前端开发
JavaScript基础知识-函数的参数
关于JavaScript函数参数基础知识的介绍。
18 4
JavaScript基础知识-函数的参数
|
6天前
|
缓存 JavaScript 前端开发
了解js基础知识中的作用域和闭包以及闭包的一些应用场景,浅析函数柯里化
该文章详细讲解了JavaScript中的作用域、闭包概念及其应用场景,并简要分析了函数柯里化的使用。
了解js基础知识中的作用域和闭包以及闭包的一些应用场景,浅析函数柯里化
|
8天前
|
前端开发 数据可视化 开发者
D3.js 内置的动画函数
D3.js 内置的动画函数
下一篇
无影云桌面