当前位置: 首页 > news >正文

JavaScript函数学习笔记[Web开发]


JavaScript函数

本文为学习笔记,参考Javascript.info,菜鸟等文章编写。

跳转连接

  1. JavaScript基础知识学习笔记[Web开发]
  2. JavaScript对象学习笔记[Web开发]
  3. JavaScript数据类型学习笔记[Web开发]
  4. JavaScript函数学习笔记[Web开发]

文章目录

    • 跳转连接
    • Rest 参数 ...
    • "arguments” 变量
    • Spread 语法

Rest 参数 …

在 JavaScript 中,无论函数是如何定义的,都可以在调用它时传入任意数量的参数。

这个函数不会因为传入过多的参数而报错。但是只有本应被接收的参数会被接收。

我们可以在函数定义中声明一个数组来收集参数。语法是这样的:...变量名,这将会声明一个数组并指定其名称,其中存有剩余的参数。这三个点的语义就是“收集剩余的参数并存进指定数组中”。

function sumAll(...args) { // 数组名为 argslet sum = 0;for (let arg of args) sum += arg;return sum;
}alert( sumAll(1, 2, 3) ); // 6

注意:Rest 参数必须放到参数列表的末尾

"arguments” 变量

有一个名为 arguments 的特殊类数组对象可以在函数中被访问,该对象以参数在参数列表中的索引作为键,存储所有参数。

在过去,JavaScript 中不支持 rest 参数语法,而使用 arguments 是获取函数所有参数的唯一方法。

function showName() {alert( arguments.length );alert( arguments[0] );alert( arguments[1] );// 它是可遍历的// for(let arg of arguments) alert(arg);
}// 依次显示:2,Julius,Caesar
showName("Julius", "Caesar");// 依次显示:1,Ilya,undefined(没有第二个参数)
showName("Ilya");

但缺点是,尽管 arguments 是一个类数组,也是可迭代对象,但它终究不是数组。它不支持数组方法,因此我们不能调用 arguments.map(...) 等方法。

注意,箭头函数没有 "arguments"。如果我们在箭头函数中访问 arguments,访问到的 arguments 并不属于箭头函数,而是属于箭头函数外部的“普通”函数。

Spread 语法

当在函数调用中使用 ...arr 时,它会把可迭代对象 arr “展开”到参数列表中。

let arr1 = [3, 5, 1];
alert( Math.max(...arr1) ); // 5(spread 语法把数组转换为参数列表)// 多个可迭代对象
let arr2 = [8, 3, -8, 1];
alert( Math.max(...arr1, ...arr2) ); // 8// 与常规值结合使用
alert( Math.max(1, ...arr1, 2, ...arr2, 25) ); // 25

可以使用 spread 语法来合并数组

let arr = [3, 5, 1];
let arr2 = [8, 9, 15];let merged = [0, ...arr, 2, ...arr2];alert(merged); // 0,3,5,1,2,8,9,15(0,然后是 arr,然后是 2,然后是 arr2)

可以用 spread 语法这样操作任何可迭代对象

// 将字符串转换为字符数组
let str = "Hello";alert( [...str] ); // H,e,l,l,o

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • ts -> class -> abstract
  • CID引流-拼多多案例
  • 前端系列-7 Vue3响应式数据
  • 【简历】吉林某一本大学:JAVA秋招简历指导,简历通过率比较低
  • maven archetype
  • LeetCode 热题 HOT 100 (011/100)【宇宙最简单版】
  • 代码随想录算法训练营DAY64|拓扑排序、dijkstra(朴素版)
  • 基因组挖掘指导天然药物分子的发现-文献精读34
  • MongoDB教程(十五):MongoDB原子操作
  • 【系列专题】新质生产力之光,照亮“制造强国”之路
  • 【SpringBoot】URL映射之consumes和produces匹配、params和header匹配
  • go-kratos 学习笔记(1) 安装
  • 【数据结构】树和二叉树
  • InternLM学习笔记
  • 图解RocketMQ之消息模型详解(1)
  • “Material Design”设计规范在 ComponentOne For WinForm 的全新尝试!
  • 08.Android之View事件问题
  • Angular数据绑定机制
  • CentOS 7 防火墙操作
  • Java,console输出实时的转向GUI textbox
  • leetcode-27. Remove Element
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • orm2 中文文档 3.1 模型属性
  • PHP的Ev教程三(Periodic watcher)
  • QQ浏览器x5内核的兼容性问题
  • 成为一名优秀的Developer的书单
  • 机器学习 vs. 深度学习
  • 机器学习中为什么要做归一化normalization
  • 类orAPI - 收藏集 - 掘金
  • 小程序 setData 学问多
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • HanLP分词命名实体提取详解
  • 积累各种好的链接
  • ​2020 年大前端技术趋势解读
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • # SpringBoot 如何让指定的Bean先加载
  • ###项目技术发展史
  • (13)[Xamarin.Android] 不同分辨率下的图片使用概论
  • (17)Hive ——MR任务的map与reduce个数由什么决定?
  • (6)STL算法之转换
  • (done) 两个矩阵 “相似” 是什么意思?
  • (floyd+补集) poj 3275
  • (javaweb)Http协议
  • (PySpark)RDD实验实战——取最大数出现的次数
  • (二)测试工具
  • (九)One-Wire总线-DS18B20
  • (九)信息融合方式简介
  • (三)elasticsearch 源码之启动流程分析
  • (一)项目实践-利用Appdesigner制作目标跟踪仿真软件
  • (转)C#调用WebService 基础
  • (转)JVM内存分配 -Xms128m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=512m
  • .libPaths()设置包加载目录
  • .NET Core中如何集成RabbitMQ
  • .Net OpenCVSharp生成灰度图和二值图
  • .NET微信公众号开发-2.0创建自定义菜单