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 ...
随机推荐
- 什么是Placement new ?
1. 什么是placementNew placement new的作用就是:创建对象(调用该类的构造函数)但是不分配内存,而是在已有的内存块上面创建对象.用于需要反复创建并删除的对象上,可以降低分配释 ...
- Java 面试手撕代码
1. 判断括号有效性 public static boolean fun5(String str) { HashMap<Character, Character> hashMap = ne ...
- 关于k8s微服务的基础知识分享总结
1.说起k8s,先得讲讲微服务,来个图(百度上找到的图),初识 1.微服务架构强调的是一种架构模式,提倡将单一的应用程序,划分为一组小的服务,每个服务运行在其独立的自己的进程中,服务之间相互协调配合, ...
- 抑制stable_secret读取关键信息
如何抑制stable_secret读取关键的"net.ipv6.conf.all.stable_secret"消息? 您可以/dev/null使用以下命令抑制额外的不需要的消息或将 ...
- Linux0.11源码学习(三)
Linux0.11源码学习(三) linux0.11源码学习笔记 参考资料: https://github.com/sunym1993/flash-linux0.11-talk https://git ...
- GCC编译器编译过程
GCC编译器编译过程 #生成test可执行文件 g++ test.cpp -o test 其实,上述命令可以分解为以下几个步骤 1. 预处理-Pre-Processing # -E 选择指示编译器仅对 ...
- 存算分离实践:JuiceFS 在中国电信日均 PB 级数据场景的应用
01- 大数据运营的挑战 & 升级思考 大数据运营面临的挑战 中国电信大数据集群每日数据量庞大,单个业务单日量级可达到 PB 级别,且存在大量过期数据(冷数据).冗余数据,存储压力大:每个省公 ...
- LeetcodePractice-数组
目录 88. 合并两个有序数组 思路解析 字节&1. 两数之和 思路解析 腾讯&15. 三数之和 思路解析 18. 四数之和 思路解析 解释下,tmpSum为什么用int不行,需要用i ...
- 当我把ChatGPT拉进群聊里,我的朋友都玩疯了
前言 近期ChatGPT可以说是太火了,问答.写论文.写诗.写代码,只要输入精确的prompt,他的表现总是让人惊喜.本着打不过就加入的原则.要是把ChatGPT拉入群聊中,会是怎样一番场景?说做就做 ...
- smart rtmpd web 接口说明
smart rtmpd web 接口分为下面几类 分类名称 功能描述 live 这个就是平常我们的直播播放接口 rec 这个就是平常我们的录像回放接口 vod 这个就是我们点播接口,支持字 ...