函数式编程(4) 纯函数

纯函数:每次调用时结果总是一样

这个函数不纯:返回的值有变化

  这个函数不纯:因为使用了全局变量minAge

要让它变成纯函数需要

纯函数的好处

  • immutability/不变性
    如果创建了一个对象

js中的const阻止了重新分配一个对象给book, 而并不能阻止给更改其title属性

 在js中练习immutability

// const person = { name: "Y" };
// person.name = '' //如果使用函数式编程不应该 直接修改此属性// 方法1  Object.assign
// const updated = Object.assign({}, person, { name: "b", age: "22" }); //Object.assign()此方法复制一个对象到另一个 复制person到{}// 方法2 拓展运算符
// const updated = { ...person, name: "a" }; //...person已经复制了person
// console.log("updated: ", updated);// 上面两种方法都是浅拷贝 即使浅拷贝了对象 但其中的address属性还是同一个,如果改变了其中一个引用的值,另一个也会改变 不能复制再嵌套一层的对象
const person = {name: "Y",address: {city: "la",},
};
// 1.shallow copy
// updated.address.city = "ny"// 2.深拷贝
const updated = { ...person, address:{...person.address,city:"ny"
} }; //...person已经复制了person// const updated = { ...person, name: "a" }; //...person已经复制了personconsole.log('person: ', person);
const numbers = [1,2,3]// 添加6到2的前面
// const index = numbers.indexOf(2)
// // const added = [...numbers]
// const added = [...numbers.slice(0,index),//复制2之前的所有项
// 6,
// ...numbers.slice(index)//.slice返回下标后所有项
// ]
// console.log(added);// 删除项
// const removed = numbers.filter(n => n!==2);
// console.log('removed: ', removed);// 更改项
const updated = numbers.filter(n => n===2? 20:n);
console.log('updated: ', updated);

安装并引入 immutable.js后的练习

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/61030.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Golang】——Gin 框架中间件详解:从基础到实战

中间件是 Web 应用开发中常见的功能模块,Gin 框架支持自定义和使用内置的中间件,让你在请求到达路由处理函数前进行一系列预处理操作。这篇博客将涵盖中间件的概念、内置中间件的用法、如何编写自定义中间件,以及在实际应用中的一些最佳实践。…

Python爬虫知识体系-----requests-----持续更新

数据科学、数据分析、人工智能必备知识汇总-----Python爬虫-----持续更新:https://blog.csdn.net/grd_java/article/details/140574349 文章目录 一、安装和基本使用1. 安装2. 基本使用3. response常用属性 二、get请求三、post请求四、代理 一、安装和基本使用 1.…

15分钟学 Go 第 56 天:架构设计基本原则

第56天:架构设计基本原则 学习目标 理解和掌握基本的架构设计原则,以提升软件系统的可维护性、可扩展性和可重用性。 内容提纲 架构设计原则概述常见架构设计原则 单一职责原则 (SRP)开放/封闭原则 (OCP)里氏替换原则 (LSP)接口分离原则 (ISP)依赖反…

【B+树特点】

B树的特点 B树是B树的一种变体,广泛用于数据库系统和文件系统中,特别是在索引结构中。B树在B树的基础上进行了优化,主要在数据存储和查询效率上有所提升。以下是B树的主要特点: 1. 所有数据存储在叶子节点 与B树不同&#xff0…

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(十三)图优化SLAM的本质

一、直白解释slam与图优化的结合 我从b站上学习理解的这个概念。 视频的大概位置是1个小时以后,在第75min到80min之间。图优化SLAM是怎么一回事。 slam本身是有运动方程的,也就是运动状态递推方程,也就是预测过程。通过t1时刻&#xff0c…

PyCharm2024.2.4安装

一、官网下载 1.从下面的链接点进去 PyCharm: The Python IDE for data science and web development by JetBrains 2.进入官网后,下载pycharm安装包 3.点击下载能适配你系统的安装包 4.安装包下载完成 二、安装 1.下载完成后,打开点击右键&#xff…

WebSocket简易聊天室实现(有详细解释)

完整代码 Arata08/online-chat-demo 服务端: 1.编写配置类,扫描有 ServerEndpoint 注解的 Bean import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.s…

Vue 3 中的原生事件监听与组件事件处理详解

Vue 3 中的原生事件监听与组件事件处理完全指南 在 Vue 3 中,事件监听和事件处理是组件交互中的关键部分。Vue 提供了一套简单而强大的事件处理机制,可以方便地监听 DOM 原生事件和组件自定义事件。本篇文章将详细介绍 Vue 3 中事件的使用,包…

解决Xeyes: Error can‘t open display,远程X无法连通问题。

一、问题分析 提前申明: 本次实验使用REHL 8 进行操作! 客户机 A 为X-Client ,即远程X的客户端。 服务机 B 为X-Server,即远程X的服务端。 问题的所有操作均在已经配置好Xorg的前提下进行的,不知道不配置会有什么影响&…

19.UE5道具掉落

2-21 道具掉落,回血、回蓝、升级提升伤害_哔哩哔哩_bilibili 目录 1.道具的创建,道具功能的实现 2.随机掉落 1.道具的创建,道具功能的实现 新建Actor蓝图,并命名为道具总类,添加一个Niagara粒子组件和一个碰撞箱bo…

Java 语言的强大特性

一、面向对象 面向对象编程(OOP)是一种编程范式,Java 完全遵循这一范式,并具备封装、继承和多态三大核心特性。 1. 封装 封装是将数据和操作封装在类中,通过访问修饰符(如 public、private、protected&am…

DevExpress WinForms中文教程:Data Grid - 如何绑定到实体框架数据源?

在本教程中,您将学习如何将DevExpress WinForms的网格控件绑定到实体框架数据源、如何使用数据注释属性来更改网格显示和管理数据的方式,以及如何将单元格值更改发送回数据源。 P.S:DevExpress WinForms拥有180组件和UI库,能为Wi…

PostgreSQL学习总结(13)—— PostgreSQL 15.8 如何成就数据库性能王者?

前言 在当今数据驱动的时代,数据库的性能无疑是企业和开发者最为关注的焦点之一。而 PostgreSQL 15.8 的横空出世,犹如一颗璀璨的明星,在数据库性能的苍穹中闪耀着耀眼的光芒,引得无数人为之侧目。今天,就让我们一同揭…

树形dp总结

这类题型在 dp 中很常见,于是做一个总结吧!!! 最经典的题:没有上司的舞会 传送门:没有上司的舞会 - 洛谷 状态表示: dp[i][0] 为 以 i 为根的子树中,选择 i 节点的最大欢乐值 d…

关于强化学习的一份介绍

在这篇文章中,我将介绍与强化学习有关的一些东西,具体包括相关概念、k-摇臂机、强化学习的种类等。 一、基本概念 所谓强化学习就是去学习:做什么才能使得数值化的收益信号最大化。学习者不会被告知应该采取什么动作,而是必须通…

微服务day07

MQ高级 发送者可靠性,MQ的可靠性,消费者可靠性。 发送者可靠性 发送者重连 连接重试的配置文件: spring:rabbitmq:connection-timeout: 1s # 设置MQ的连接超时时间template:retry:enabled: true # 开启超时重试机制initial-interval: 10…

i春秋-EXEC(命令执行、nc传输文件、带外通道传输数据)

练习平台地址 竞赛中心 题目描述 题目内容 小猫旁边有一个no sign F12检查页面 没有提示 检查源代码 发现使用了vim编辑器 进而联想到vim编辑器的临时交换文件.xxx.swp 访问.index.php.swp&#xff0c;成功下载文件 使用vim -r 查看文件内容 vim -r index.php.swp <?p…

【C语言】前端未来

你对前端未来的技术趋势有何看法&#xff1f;例如WebAssembly、WebXR、PWA等。 对未来前端技术趋势的看法&#xff0c;我认为有几个关键方向正在快速发展&#xff1a; WebAssembly (WASM)&#xff1a;随着性能需求的增长&#xff0c;WebAssembly作为一种低级字节码运行环境&…

【Web前端】Promise的使用

Promise是异步编程的核心概念之一。代表一个可能尚未完成的操作&#xff0c;并提供了一种机制来处理该操作最终的成功或失败。具体来说&#xff0c;Promise是由异步函数返回的对象&#xff0c;能够指示该操作当前所处的状态。 当Promise被创建时&#xff0c;它会处于“待定”&a…

YOLO系列基础(六)YOLOv1原理详解,清晰明了!

系列文章地址 YOLO系列基础&#xff08;一&#xff09;卷积神经网络原理详解与基础层级结构说明-CSDN博客 YOLO系列基础&#xff08;二&#xff09;Bottleneck瓶颈层原理详解-CSDN博客 YOLO系列基础&#xff08;三&#xff09;从ResNet残差网络到C3层-CSDN博客 YOLO系列基础…