学习前端第三十二天(Rest 参数与 Spread 语法,变量作用域,闭包)
一、Rest 参数与 Spread 语法
1.rest参数
...变量名:收集剩余的参数并存进指定数组中,需要放到最后;
2.arguments变量
// arguments,以参数在参数列表中的索引作为键,存储所有参数,以类数组对象的形式输出所有函数参数
// 箭头函数没有arguments和this对象,会去上级函数找,没有上级函数就报错
function fn3(a, b, ...c) {
console.log(arguments);
console.log(Array.from(arguments)); // 转为数组
}
fn3(1, 2, 3, 4, 5, 6);
3.Spread 语法
使用...,把任意可迭代对象“展开”到参数列表中
// 可传入多个可迭代对象
const arr2 = [9, 77, 85, 12, 33];
console.log(Math.max(...arr, ...arr2)); // 85
// 可以与常规值结合使用
console.log(Math.max(1, ...arr, 2, ...arr2, 25)); //85
// 合并数组
let sumArr = [0, ...arr, ...arr2];
// 常用的复制数组方法
let arr4 = [...arr];
使用 spread 语法将任意可迭代对象转换为字符数组
let str = "Hello";
console.log([...str]); // ['H', 'e', 'l', 'l', 'o']
let s = new Set();
s.add("css").add("html");
console.log([...s]); // ['css', 'html']
let m = new Map();
m.set("name", "jack").set("age", 20)
console.log([...m]); // [Array(2), Array(2)]
4.浅复制/深复制
浅复制:
// “001” => ["a","b","c"];// const arr = [1, "001", 2, 3];const arr = [1, ["a", "b", "c"], 2, 3];// 浅复制,修改一个影响到另一个const newArr = [...arr]; // [1, "001", 2, 3]; newArr[1][0] = "X";console.log(arr);//[1, ['X', 'b', 'c'], 2, 3]
深复制方法一:
// “001” => ["a","b","c"];// const arr = [1, "001", 2, 3];const arr = [1, ["a", "b", "c"], 2, 3];// 深复制,修改一个不会影响到另一个const newArr = JSON.parse(JSON.stringify(arr)); // [1, "001", 2, 3];newArr[1][0] = "X";console.log(newArr); //[1, ['X', 'b', 'c'], 2, 3]console.log(arr); //[1, ['a', 'b', 'c'], 2, 3]
方法二方法三:
<script src="../../../lodash.min.js"></script><script>// 深度复制复杂对象 (面试题)const o1 = { a: undefined, b: function () { }, list: [1, 2, 3] };// 方法一:JSON.parse(JSON.stringify(o1)),无法复制复杂的// 方法二:递归深度赋值Object.entries(o1).forEach((el) => {if (Array.isArray(el[1])) {newObj[el[0]] = [];el[1].forEach((elx) => {newObj[el[0]].push(elx);});} else {newObj[el[0]] = el[1];}});// 方法三:第三方代码,引用js文件后,使用里面规定的代码实现const newObj = _.cloneDeep(o1);console.log(newObj)
二、变量作用域,闭包
1.代码块
如果在代码块 {...}
内声明了一个变量,那么这个变量只在该代码块内可见。
对于 if
,for
和 while
等,在 {...}
中声明的变量也仅在内部可见。
let i
位于 {...}
之外。但是 for
构造很特殊:在其中声明的变量被视为块的一部分。
2.嵌套函数(重要)
如果一个函数是在另一个函数中创建的,该函数就被称为“嵌套”函数。
function makeCounter() {let count = 0;return function() {return count++;};
}let counter = makeCounter();alert( counter() ); // 0
alert( counter() ); // 1
相关文章:
学习前端第三十二天(Rest 参数与 Spread 语法,变量作用域,闭包)
一、Rest 参数与 Spread 语法 1.rest参数 ...变量名:收集剩余的参数并存进指定数组中,需要放到最后; 2.arguments变量 // arguments,以参数在参数列表中的索引作为键,存储所有参数,以类数组对象的形式输出所有函数参数 // 箭头…...

mysql从入门到起飞+面试基础题
mysql基础 MySQL基础 企业面试题1 代码 select m.id,m.num from ( select t.id as id,count(1) num from ( select ra.requester_id as id from RequestAccepted raunion all select ra.accepter_id as id from RequestAccepted ra ) t group by t.id ) m group by id ord…...

设计模式:命令模式
文章目录 一、什么是命令模式二、命令模式结构三、命令模式实现步骤四、命令模式应用场景 一、什么是命令模式 它允许将请求封装为对象,一个请求对应于一个命令,将发出命令的责任和执行命令的责任分割开。每一个命令都是一个操作:请求的一方…...
setinterval和settimeout区别在于
setinterval和settimeout区别在于 执行次数和执行频率 setInterval和setTimeout的主要区别在于执行次数和执行频率。以下是详细介绍:12 setTimeout是一次性的定时器,它在设定的延迟时间之后执行一次函数,然后停止。setInterval是重复性的定…...
shell_结束进程脚本
结束进程的shell脚本如下: #!/bin/bash# kill all process ps aux|grep "local" | grep -v grep | awk {print $2} | while read line; do kill -9 $line; done 解析: ps aux 命令常用于查看当前系统中运行的进程,以及它们所占用…...

GDPU unity游戏开发 碰撞器与触发器
砰砰叫,谁动了她的奶酪让你的小鹿乱撞了。基于此,亦即碰撞与触发的过程。 碰撞器与触发器的区别 通俗点讲,碰撞器检测碰撞,触发器检测触发,讲了跟没讲似的。碰撞器是用来检测碰撞事件的,在unity中ÿ…...

IP地址定位技术在网络安全中的作用
在当今数字化时代,网络安全已经成为企业、政府和个人面临的重要挑战之一。随着互联网的普及和网络攻击的增加,保护个人隐私和防止网络犯罪变得尤为重要。在这一背景下,IP地址定位技术作为网络安全的重要组成部分之一,发挥着关键作…...

R语言中,查看经安装的包,查看已经加载的包,查看特定包是否已经安装,安装包,更新包,卸载包
创建于:2024.5.4 R语言中,查看经安装的包,查看已经加载的包,查看特定包是否已经安装,安装包,更新包,卸载包 文章目录 1. 查看经安装的包2. 查看已经加载的包3. 查看特定包是否已经安装4. 安装包…...

spring boot3单模块项目工程搭建-下(个人开发模板)
⛰️个人主页: 蒾酒 🔥系列专栏:《spring boot实战》 目录 写在前面 上文衔接 常用依赖介绍以及整合 web组件 测试组件 样板代码生成 数据库连接器 常用工具包 面向切面编程 ORM框架 数据连接池 接口测试、文档导出 缓存中间件 参数校…...
精准清理 MongoDB 数据:删除集合的正确姿势
在 MongoDB 数据库管理中,数据清理是维护数据库性能和保持数据一致性的关键步骤之一。而删除集合是实现数据清理的重要手段之一。在这个信息爆炸的时代,了解如何正确地执行集合删除操作至关重要。本文将深入探讨 MongoDB 中删除集合的常用方法、最佳实践…...
java 执行修改语句
你可以使用Java中的JDBC(Java Database Connectivity)来执行修改语句。以下是一个示例: import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement;public class Main {public…...

【Linux系统化学习】网络套接字(编写简单的UDP服务端和客户端)
目录 理解源IP地址和目的IP地址 认识端口号 端口号和进程ID的区别 源端口号和目的端口号 认识TCP和UDP协议 TCP协议 UDP协议 网络字节序 socket编程接口 socket常见API sockaddr结构 简单的UDP网络程序 UDP服务端 创建套接字 填充本地网络信息 绑定 收取消息 …...

MFC 列表控件修改实例(源码下载)
1、本程序基于前期我的博客文章《MFC下拉菜单打钩图标存取实例(源码下载)》 2、程序功能选中列表控件某一项,修改这一项的按钮由禁止变为可用,双击这个按钮弹出对话框可对这一项的记录数据进行修改,点击确定保存修改数…...
QT设计模式:模板模式
基本概念 模板模式(Template Pattern)是一种行为型设计模式,它定义了一个操作中的算法的模板,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重新定义该算法的某些特定步骤。 实现的模块有࿱…...

8.k8s中网络资源service
目录 一、service资源概述 二、service资源类型 1.ClusterIP类型 2.service的nodeport类型 3.service的loadbalancer类型(了解即可) 4.service的externalname类型(了解即可) 三、nodeport的端口范围设置和svc的endpoint列表 1.修…...

51单片机keil编程中遇到的问题(持续更新)
字符无法打印报错 查看特殊功能寄存器名字的时候也会报错,因为无法编译通过,导致头文件的定义内容无法查找 keil编译中 error C127: ‘xx’: invalid storage class 这种一般是在编写头文件或源文件时,在声明函数的结尾没有添加分号&…...

C++类和对象详解(一)
目录 面向过程和面向对象初步认识类的引入类的定义类的两种定义方式声明和定义全部放在类体中 声名定义分离 类的作用域成员变量命名规则建议访问限定符 类的封装类的实例化类对象模型类的对象大小的计算扩展 结构体内存对齐规则 感谢各位大佬对我的支持,如果我的文章对你有用,…...

SCI论文检索报告长什么样?怎么出具?一文了解!
1、SCI检索报告是什么 SCI数据库收录最能反映基础学科研究水平和论文质量,该检索系统收录的科技期刊比较全面,可以说它是集中各个学科高质优秀论文的精粹,评职晋升、项目申报、评奖评优等很多关键时期,都需要开具已经在SCI发表的论…...

UE4_Water插件_Buoyancy组件使用
water插件提供了一个浮力Actor蓝图类。 需要注意的几个问题: 1、StaticMesh需要替换根组件。 2、需要模拟物理设置质量。 3、需要添加浮力组件,设置浮力点,应用水中牵引力。...

OceanBase学习1:分布式数据库与集中式数据库的差异
目录 1. 传统集中式数据库 2. 数据库中间件的分库分表 3. 分布式数据库的基本特点及对比分析 4. OceanBase和传统数据库的对比 5. 小结 1. 传统集中式数据库 优点 成熟稳定:经过近40年的发展,应用到各行各业,产品技术非常成熟稳定行业适配性强:适配…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望
文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例:使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例:使用OpenAI GPT-3进…...

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版分享
平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
【磁盘】每天掌握一个Linux命令 - iostat
目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat(I/O Statistics)是Linux系统下用于监视系统输入输出设备和CPU使…...
聊一聊接口测试的意义有哪些?
目录 一、隔离性 & 早期测试 二、保障系统集成质量 三、验证业务逻辑的核心层 四、提升测试效率与覆盖度 五、系统稳定性的守护者 六、驱动团队协作与契约管理 七、性能与扩展性的前置评估 八、持续交付的核心支撑 接口测试的意义可以从四个维度展开,首…...

保姆级教程:在无网络无显卡的Windows电脑的vscode本地部署deepseek
文章目录 1 前言2 部署流程2.1 准备工作2.2 Ollama2.2.1 使用有网络的电脑下载Ollama2.2.2 安装Ollama(有网络的电脑)2.2.3 安装Ollama(无网络的电脑)2.2.4 安装验证2.2.5 修改大模型安装位置2.2.6 下载Deepseek模型 2.3 将deepse…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...

边缘计算网关提升水产养殖尾水处理的远程运维效率
一、项目背景 随着水产养殖行业的快速发展,养殖尾水的处理成为了一个亟待解决的环保问题。传统的尾水处理方式不仅效率低下,而且难以实现精准监控和管理。为了提升尾水处理的效果和效率,同时降低人力成本,某大型水产养殖企业决定…...

HTTPS证书一年多少钱?
HTTPS证书作为保障网站数据传输安全的重要工具,成为众多网站运营者的必备选择。然而,面对市场上种类繁多的HTTPS证书,其一年费用究竟是多少,又受哪些因素影响呢? 首先,HTTPS证书通常在PinTrust这样的专业平…...