JS中的纯函数
在JavaScript中,纯函数是指在相同的输入下,始终产生相同的输出,并且没有副作用的函数。纯函数不会修改或依赖于函数之外的状态,也不会对外部环境产生任何可观察的影响。
以下是纯函数的特点:
1. 确定性 :对于相同的输入,纯函数总是产生相同的输出。这意味着,如果你用相同的参数多次调用纯函数,它将始终返回相同的结果。
2. 无副作用 :纯函数不会修改其外部环境,包括全局变量、输入参数对象等。这意味着,纯函数不会产生任何可观察到的副作用,例如更改全局状态或直接修改传入的参数。
使用纯函数的好处包括:
- 可预测性:由于纯函数的确定性特性,它们的行为很容易预测,有助于提高代码的可读性和可维护性。
- 可测试性:纯函数便于编写单元测试,因为它们的行为完全取决于输入参数,不依赖于外部状态。
- 引用透明性:意味着函数调用可以被其返回值替代,而不会影响程序的行为。这种特性使得代码更易于理解和推理。
- 函数组合性:由于纯函数不依赖于外部状态,它们可以方便地进行函数组合。通过将多个纯函数组合在一起,可以构建出更复杂的功能,同时保持代码的清晰性和可维护性。
- 并发安全性:由于纯函数没有共享的状态,因此它们在并发环境下是安全的。多个线程或进程可以同时调用纯函数,而不会导致竞态条件或其他并发问题。
下面是一些简单的纯函数示例:
1. 求和:
function add(a, b) {
return a + b;
}
2. 过滤数组中的奇数:
function filterOdds(arr) {
return arr.filter((num) => num % 2 !== 0);
}
3. 获取对象数组中指定属性的值:
function pluck(arr, key) {
return arr.map((obj) => obj[key]);
}
4. 将字符串中的首字母大写:
function capitalize(str) {
return str.charAt(0).toUpperCase() + str.slice(1);
}
需要注意的是,这些示例中的纯函数都没有修改原始数据或外部状态,而是通过返回新的结果来实现功能。它们的输出仅取决于输入,没有副作用,因此在使用时更可靠和可预测。
纯函数的关键是避免对外部状态的依赖和修改,以及确保相同的输入始终产生相同的输出。这种特性使得纯函数在函数式编程和无副作用的场景中特别有价值。
JS中的纯函数的更多相关文章
- js中的回调函数的理解和使用方法
js中的回调函数的理解和使用方法 一. 回调函数的作用 js代码会至上而下一条线执行下去,但是有时候我们需要等到一个操作结束之后再进行下一个操作,这时候就需要用到回调函数. 二. 回调函数的解释 因为 ...
- underscore.js中的节流函数debounce及trottle
函数节流 throttle and debounce的相关总结及想法 一开始函数节流的使用场景是:放止一个按钮多次点击多次触发一个功能函数,所以做了一个clearTimeout setTimeou ...
- js中如何在一个函数里面执行另一个函数
1.js中如何在函数a里面执行函数b function a(参数c){ b(); } function b(参数c){ } 方法2: <script type="text/javasc ...
- JavaScript -- 时光流逝(七):js中的全局函数
JavaScript -- 知识点回顾篇(七):js中的全局函数 全局函数可用于所有内建的 JavaScript 对象. (1) encodeURI():把字符串编码为 URI. <script ...
- js中的匿名函数和匿名自执行函数
1.匿名函数的常见场景 js中的匿名函数是一种很常见的函数类型,比较常见的场景: <input type="button" value="点击" id ...
- JS中关于把函数作为另一函数的参数的几点小总结
//JS中关于把函数作为函数的参数来传递的问题的小总结//第一,最简单的形式无参函数,直接形式函数的函数名放到括号中,再在执行部分这个函数即可.//当然调用时要穿另一个真正的定义好的函数/*funct ...
- js中的Generators函数
js中的Generators函数 generator一般操作 generator函数的作用就是函数体分段执行,yield表示分隔点 function *test() { console.log(1); ...
- JS中的回调函数实例浅析
本文实例讲述了JS中的回调函数.分享给大家供大家参考,具体如下: 在说回调函数之前,不妨先看一段代码,相信有点js基础的同学都能明白他的含义: ? 1 2 3 document.getElementB ...
- js中关于事件处理函数名后面是否带括号的问题
今天总结一个关于事件处理程序的小细节.首先回顾一下事件处理的一些概念. JS中的事件处理(事件绑定)就是让某种或某些事件触发某些活动.有两种常见的形式,分别是DOM Level 0 和DOM Leve ...
- js中的匿名函数自执行
随笔,java中因为有修饰符的存在,那就有private类的存在,js不一样,没有修饰词一说,因此为了防止全局变量的污染,js中就出现了匿名函数,直接上code,看到的人可以自己体会: (functi ...
随机推荐
- Windows 任务栏透明 居中
任务栏设置 任务栏居中 由于windows默认的程序是从左往右显示,看着可能有一点不舒服,当然如果使用习惯的话,忽然居中,可能更不舒服 首先搜索字符映射表 点击字符映设表中第五行的空白字符,选择进行复 ...
- 记录一次线上gitlab11.x升级gitlab14.x版本操作
前言:gitlab11升级到14还是有挺多需要注意的坑,也算是做一次积累吧,升级前后,gitalb的WEB界面也变化了很多,升级过程需要注意的地方我放到最后说明,挺关键的 一.首先需要下载好要升级的包 ...
- 马志强:语音识别技术研究进展和应用落地分享丨RTC Dev Meetup
本文内容源自「RTC Dev Meetup 丨语音处理在实时互动领域的技术实践和应用]的演讲分享,分享讲师为寰语科技语音识别研究主管马志强. 01 语音识别技术现状 1.语音成为万物互联时代人机交互关 ...
- 被冰封的 Bug:Fishhook Crash 修复纪实
作者:郝连福,业界资深计算机技术专家,现任声网Agora 首席前端架构师.先后担任过 Principal Engineer/Engineering Director(UTStarcom).Sr. ar ...
- 浅谈云原生基础入坑与docker 搭建redis-cluster集群
浅谈云原生基础入坑与docker 搭建redis-cluster集群 开篇来点自己的小感触:自从走上后端开发这条无法回头的互卷道路以后,在视野内可见新的技术在迭代,更新的技术在不断发行.就拿最近的Op ...
- 《爆肝整理》保姆级系列教程-玩转Charles抓包神器教程(12)-Charles如何使用Repeat功能进行简单压力测试
1.前言 李四:"今天好累啊,点的我手指都疼了.我一直被要求给后端接口的同事重复发送请求来调试接口." Charles:"哎呀,李四同学,你怎么能一条一条的手动发送呢 我 ...
- 恰好经过k条边的最短路
需要用到离散数学中关于关系矩阵的运算的知识 一个表示一个图中任意两点间经过2条边最短路的关系矩阵的平方表示的是任意两点间经过4条边的最短路的关系矩阵 原因在于当我们选定中间点时,路径的前半部分和后半部 ...
- [ORACLE]Oracle客户端SQLPlus安装与运用
简述 sqlplus :oracle公司提供用户操作oracle数据库的工具. sqlplus是oracle原始数据操作的客户端,这种命令行的格式有着强大的逻辑性,如果经常使用会对数据库的理解加深很多 ...
- Android开发_记事本(1)
一些知识 Textview TextView中有下述几个属性: id:为TextView设置一个组件id,根据id,我们可以在Java代码中通过findViewById()的方法获取到该对象,然后进行 ...
- LeeCode 318周赛复盘
T1: 对数组执行操作 思路:模拟 public int[] applyOperations(int[] nums) { int n = nums.length; for (int i = 0; i ...