参数的本质:详解 JavaScript 函数的参数
文章导读:AI 辅助学习前端,包含入门、进阶、高级部分前端系列内容,当前是 JavaScript 的部分,瑶琴会持续更新,适合零基础的朋友,已有前端工作经验的可以不看,也可以当作基础知识回顾。
上篇文章中,瑶琴带大家学习和使用了函数,看了上篇文章即使是小白的你也能自己创建简单的函数,了解函数的基础定义和使用,以及函数的作用,这篇文章瑶琴带大家拆解 javascript 函数中重要的元素之一:函数的参数。本篇文章内容较干,建议配合热水食用。
函数的参数是在函数定义和调用时用于传递信息的一种机制。JavaScript 中的函数可以接受零个或多个参数,这些参数可以用来定制函数的行为。
参数的本质是将实参传给形参。
1.函数参数的定义
函数参数是在函数声明或函数表达式中定义的变量,它们被包含在圆括号 () 内。参数的个数可以是零个或多个。
function exampleFunction(param1, param2, param3) {// 函数体
}
2.函数参数的类型
JavaScript 中的函数参数不需要声明类型,可以接受任意类型的值,包括基本类型和对象。
function add(x, y) {return x + y;
}console.log(add(2, 3)); // 输出 5
console.log(add("Hello", " World")); // 输出 "Hello World"
3.默认参数
ES6 引入了默认参数,允许为函数参数指定默认值。
function greet(name = "Guest") {console.log(`Hello, ${name}!`);
}greet(); // 输出 "Hello, Guest!"
greet("John"); // 输出 "Hello, John!"
-
上面的例子给参数 name 设置了一个默认值 Guest,调用函数时没有传入参数时会使用默认值
4. 剩余参数
剩余参数允许将不确定数量的参数表示为一个数组。剩余参数使用三个点 ... 后跟一个参数名。这个参数会成为包含了所有传递给函数的多余参数的数组。
1.剩余参数提供了更灵活、易读的方式来处理不定数量的参数。
2.剩余参数是真正的数组,可以直接使用数组的方法。
function sum(...numbers) {
// numbers 是一个包含了所有传递给函数的多余参数的数组return numbers.reduce((total, num) => total + num, 0);
}console.log(sum(1, 2, 3, 4, 5)); // 输出 15
可以将剩余参数与普通参数一起使用,但要确保普通参数位于剩余参数之前。
例子:
function exampleFunction(arg1, arg2, ...rest) {console.log(arg1); // 第一个参数console.log(arg2); // 第二个参数console.log(rest); // 剩余的参数数组
}
剩余参数的使用场景:
-
处理不确定数量的参数:当函数需要接受任意数量的参数时,剩余参数非常有用。
-
替代 arguments 对象:在ES6之前,通常使用 arguments 对象处理不定数量的参数,而现在剩余参数提供了更灵活、易读的替代方案。
5. arguments 对象
在函数内部,可以使用 arguments 对象访问所有传递给函数的参数,即使在函数定义时没有明确列出这些参数。
arguments是每一个函数中独有的,arguments是不会跨函数的
function showArguments() {for (let i = 0; i < arguments.length; i++) {console.log(arguments[i]);}
}showArguments(1, "two", [3, 4]); // 输出 1, "two", [3, 4]
注意:
arguments 不是一个真正的数组,它是一个对象。要使用数组方法,需要将其转换为数组:Array.from(arguments) 或 Array.prototype.slice.call(arguments)。
6. 函数参数的顺序
函数参数的顺序很重要,调用函数时要按照函数定义的顺序传递参数。
function fullName(firstName, lastName) {return `${firstName} ${lastName}`;
}console.log(fullName("John", "Doe")); // 输出 "John Doe"
7.高阶函数和回调函数
高阶函数(Higher-Order Function): 高阶函数是指接受其他函数作为参数或者将函数作为返回值的函数。
JavaScript 中函数是一等公民,因此可以作为参数传递给其他函数,也可以从函数返回,所以高阶函数在 JavaScript 中非常常见。
// 高阶函数示例
function multiplyBy(factor) {return function (number) {return number * factor;};
}const double = multiplyBy(2);
const triple = multiplyBy(3);console.log(double(5)); // 输出 10
console.log(triple(5)); // 输出 15
-
在上面的例子中,multiplyBy 就是一个高阶函数,它返回一个新的函数。
回调函数(Callback Function):
回调函数是作为参数传递给其他函数的函数,它在异步操作完成或特定事件发生时被调用。在 JavaScript 中,回调函数通常用于处理异步操作,事件处理,或者实现某种延迟执行。
// 回调函数示例
function fetchData(url, callback) {// 模拟异步请求setTimeout(function () {const data = { name: 'John', age: 30 };callback(data);}, 1000);
}function displayData(data) {console.log(data);
}// 调用 fetchData,并传递 displayData 作为回调函数
fetchData('https://example.com/api/data', displayData);
-
在这个例子中,displayData 就是一个回调函数,它在 fetchData 异步操作完成后被调用。
总结:
高阶函数 是一个函数,它可以接受函数作为参数,或者返回一个函数。
回调函数 是作为参数传递给其他函数的函数,用于在特定事件发生时被调用,通常用于异步编程。
这两个概念经常一起使用,因为高阶函数常常会接受回调函数作为参数。在 JavaScript 中,它们是实现许多复杂功能和处理异步代码的重要工具。
8.arguments 和剩余参数的区别
-
arguments 对象是一个类数组对象,包含了函数调用时传递的所有参数。
-
剩余参数是一个真正的数组,包含了函数调用时传递的多余的参数。
function example() {console.log(arguments); // 输出类数组对象
}function example2(...rest) {console.log(rest); // 输出数组
}
区别总结:
-
arguments 是对象,剩余参数是数组。
-
剩余参数提供了更方便的语法和更好的可读性。
-
剩余参数只能出现在函数参数的最后,而 arguments 对象中的参数顺序和数量与调用时的参数一致。
这篇文章干活满满,对于初学者来说需要一定的时间消化,学习相关知识点时,一定要将文中的例子放在编辑器中执行,自己动手实践能帮助你更好的理解。如果有什么不理解的地方,可以给我留言,瑶琴一定知无不言。
希望今天的内容对初学前端的朋友有所帮助。也希望每一个初学者都能成为一个优秀的前端开发工程师,加油。
最后啰嗦一句,好记性不如烂笔头,希望大家在学习的过程中养成做笔记的习惯,形成自己的知识体系。
相关文章:
参数的本质:详解 JavaScript 函数的参数
文章导读:AI 辅助学习前端,包含入门、进阶、高级部分前端系列内容,当前是 JavaScript 的部分,瑶琴会持续更新,适合零基础的朋友,已有前端工作经验的可以不看,也可以当作基础知识回顾。 上篇文章…...
悲痛都会过去,唯有当下值得珍惜
在生活的长河中,我们都会经历各种各样的悲痛与挫折,无论是来自原生家庭的困扰,婚姻中的曲折,还是小时候的创伤、男女关系中的纠葛、校园时期的霸凌。然而,当我们回首过去,曾经以为无法逾越的痛苦࿰…...
第三方软件测试机构进行代码审计需要哪些专业的知识?
代码审计 进行代码审计需要专业的知识,包括编程语言、操作系统、数据库、网络知识以及安全知识等。 1.编程语言知识是进行代码审计的基础,因为你需要理解代码的语法和结构。对于不同的应用程序,你需要了解其所使用的编程语言的特点和语法规…...
Modal.method() 不显示头部的问题
ant-design中的Modal组件有两种用法: 第一种是用标签:<a-modal></a-modal> 第二种是用Api:Modal.info、Modal.warning、Modal.confirm...... 一开始项目中这两种用法是混用的,后面UI改造,需要统一样式&…...
Java中的内部类及其用途
一、技术难点 在Java中,内部类是一个定义在另一个类内部的类。这种嵌套的结构带来了一些技术上的难点和挑战: 访问控制:内部类可以直接访问外部类的所有成员(包括私有成员),但外部类不能直接访问内部类的…...
堆(建堆算法,堆排序)
目录 一.什么是堆? 1.堆 2.堆的储存 二.堆结构的创建 1.头文件的声明: 2.向上调整 3.向下调整 4.源码: 三.建堆算法 1.向上建堆法 2.向下建堆法 四.堆排序 五.在文件中Top出最小的K个数 一.什么是堆? 1.堆 堆就…...
Linux内核重置root密码
Ubuntu 首先重新启动Ubuntu系统,然后快速按下shift键,以调出grub启动菜单在这里我们选择第二个(Ubuntu高级选项),选中后按下Enter键 选择最高的Linux内核版本所对应的recovery mode模式,按e键编辑启动项 在…...
LaTex安装及配置(Windows)
LaTex安装及配置(Windows) 安装环境安装texlive下载texlive安装 编辑器安装texstudio下载texstudio安装 环境配置 使用第一个LaTex文档新建文件编程查看results 安装 环境安装 texlive下载 镜像清华源下载地址:https://mirrors.tuna.tsing…...
这才是满分毕业答辩PPT!
这才是满分毕业答辩PPT! 2024年 毕业答辩论文指南 创新 正式 高效 正值毕业季,是不是很多同学,非常头疼如何进行论文答辩? 要想导师满意,顺利毕业,那么手里必须有份优秀的答辩PPT。这将是你的秘密武器&…...
【字典树(前缀树) 字符串】2416. 字符串的前缀分数和
本文涉及知识点 字典树(前缀树) 字符串 LeetCode 2416. 字符串的前缀分数和 给你一个长度为 n 的数组 words ,该数组由 非空 字符串组成。 定义字符串 word 的 分数 等于以 word 作为 前缀 的 words[i] 的数目。 例如,如果 words [“a”,…...
X-CSV-Reader:一个使用Rust实现CSV命令行读取器
🎈效果演示 ⚡️快速上手 依赖导入: cargo add csv读取实现: use std::error::Error; use std::fs::File; use std::path::Path;fn read_csv<P: AsRef<Path>>(filename: P) -> Result<(), Box<dyn Error>> {le…...
集成ECharts到若依框架:原理与使用方法详解
ECharts 是一个强大的开源数据可视化库,基于 JavaScript,能够创建丰富多彩的图表和交互数据展示。结合若依框架(RuoYi),我们可以非常方便地将 ECharts 集成到系统中,实现数据的可视化展示。本文将详细介绍 …...
【机器学习】——线性模型
💻博主现有专栏: C51单片机(STC89C516),c语言,c,离散数学,算法设计与分析,数据结构,Python,Java基础,MySQL,linux…...
最全的Redis常用命令
Redis是一个开源的内存数据结构存储系统,用作数据库、缓存和消息代理。它支持多种类型的数据结构,如字符串(strings)、哈希(hashes)、列表(lists)、集合(sets)…...
sourcetree推送到git上面
官网:Sourcetree | Free Git GUI for Mac and Windows 下载到1次提交 下载后打开 点击跳过 下一步 名字邮箱 点击clone 把自己要上传的代码粘贴到里面去 返回点击远程->点击暂存所有 加载完毕后,输入提交内容提交 提交完成了 2次提交 把文件夹内的…...
勒索病毒的策略与建议
随着网络技术的快速发展,勒索病毒攻击成为全球范围内日益严重的网络安全威胁。勒索病毒通过加密用户文件或锁定系统来勒索赎金,给个人和企业带来了巨大的损失。因此,了解如何应对勒索病毒攻击至关重要。本文将概述一些有效的防范措施和应对策…...
doxygen 1.11.0 使用详解(十四)——输出格式
目录 HTMLLATEXMan pagesRTFXMLDocBookCompiled HTML Help (a.k.a. Windows 98 help)Qt Compressed Help (.qch)Eclipse HelpXCode DocSetsPostScriptPDF The following output formats are directly supported by doxygen: HTML Generated if GENERATE_HTML is set to YES i…...
java list<AnalystEducationDO> 转成List<AnalystEducationRespVO>两个对象的属性一样
如果AnalystEducationDO和AnalystEducationRespVO两个类的属性完全相同,且遵循Java Bean的命名规范(即具有相应的getter和setter方法),你可以利用一些库来简化转换过程,比如Apache BeanUtils或Spring Framework的BeanU…...
[Algorihm][简单多状态DP问题][买卖股票的最佳时机含冷冻期][买卖股票的最佳时机含手续费]详细讲解
目录 1.买卖股票的最佳时机含冷冻期1.题目链接买卖股票的最佳时机含冷冻期2.算法原理详解3.代码实现 2.买卖股票的最佳时机含手续费1.题目链接2.算法原理详解3.代码实现 1.买卖股票的最佳时机含冷冻期 1.题目链接 买卖股票的最佳时机含冷冻期 2.算法原理详解 思路ÿ…...
微服务:利用RestTemplate实现远程调用
打算系统学习一下微服务知识,从今天开始记录。 远程调用 调用order接口,查询。 由于实现还未封装用户信息,所以为null。 下面我们来使用远程调用用户服务的接口,然后封装一下用户信息返回即可。 流程图 配置类中注入RestTe…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
Chapter03-Authentication vulnerabilities
文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...
在rocky linux 9.5上在线安装 docker
前面是指南,后面是日志 sudo dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo sudo dnf install docker-ce docker-ce-cli containerd.io -y docker version sudo systemctl start docker sudo systemctl status docker …...
2024年赣州旅游投资集团社会招聘笔试真
2024年赣州旅游投资集团社会招聘笔试真 题 ( 满 分 1 0 0 分 时 间 1 2 0 分 钟 ) 一、单选题(每题只有一个正确答案,答错、不答或多答均不得分) 1.纪要的特点不包括()。 A.概括重点 B.指导传达 C. 客观纪实 D.有言必录 【答案】: D 2.1864年,()预言了电磁波的存在,并指出…...
Linux简单的操作
ls ls 查看当前目录 ll 查看详细内容 ls -a 查看所有的内容 ls --help 查看方法文档 pwd pwd 查看当前路径 cd cd 转路径 cd .. 转上一级路径 cd 名 转换路径 …...
376. Wiggle Subsequence
376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...
oracle与MySQL数据库之间数据同步的技术要点
Oracle与MySQL数据库之间的数据同步是一个涉及多个技术要点的复杂任务。由于Oracle和MySQL的架构差异,它们的数据同步要求既要保持数据的准确性和一致性,又要处理好性能问题。以下是一些主要的技术要点: 数据结构差异 数据类型差异ÿ…...
新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...
