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

参数的本质:详解 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 函数的参数

文章导读&#xff1a;AI 辅助学习前端&#xff0c;包含入门、进阶、高级部分前端系列内容&#xff0c;当前是 JavaScript 的部分&#xff0c;瑶琴会持续更新&#xff0c;适合零基础的朋友&#xff0c;已有前端工作经验的可以不看&#xff0c;也可以当作基础知识回顾。 上篇文章…...

悲痛都会过去,唯有当下值得珍惜

在生活的长河中&#xff0c;我们都会经历各种各样的悲痛与挫折&#xff0c;无论是来自原生家庭的困扰&#xff0c;婚姻中的曲折&#xff0c;还是小时候的创伤、男女关系中的纠葛、校园时期的霸凌。然而&#xff0c;当我们回首过去&#xff0c;曾经以为无法逾越的痛苦&#xff0…...

第三方软件测试机构进行代码审计需要哪些专业的知识?

代码审计 进行代码审计需要专业的知识&#xff0c;包括编程语言、操作系统、数据库、网络知识以及安全知识等。 1.编程语言知识是进行代码审计的基础&#xff0c;因为你需要理解代码的语法和结构。对于不同的应用程序&#xff0c;你需要了解其所使用的编程语言的特点和语法规…...

Modal.method() 不显示头部的问题

ant-design中的Modal组件有两种用法&#xff1a; 第一种是用标签&#xff1a;<a-modal></a-modal> 第二种是用Api&#xff1a;Modal.info、Modal.warning、Modal.confirm...... 一开始项目中这两种用法是混用的&#xff0c;后面UI改造&#xff0c;需要统一样式&…...

Java中的内部类及其用途

一、技术难点 在Java中&#xff0c;内部类是一个定义在另一个类内部的类。这种嵌套的结构带来了一些技术上的难点和挑战&#xff1a; 访问控制&#xff1a;内部类可以直接访问外部类的所有成员&#xff08;包括私有成员&#xff09;&#xff0c;但外部类不能直接访问内部类的…...

堆(建堆算法,堆排序)

目录 一.什么是堆&#xff1f; 1.堆 2.堆的储存 二.堆结构的创建 1.头文件的声明&#xff1a; 2.向上调整 3.向下调整 4.源码&#xff1a; 三.建堆算法 1.向上建堆法 2.向下建堆法 四.堆排序 五.在文件中Top出最小的K个数 一.什么是堆&#xff1f; 1.堆 堆就…...

Linux内核重置root密码

Ubuntu 首先重新启动Ubuntu系统&#xff0c;然后快速按下shift键&#xff0c;以调出grub启动菜单在这里我们选择第二个&#xff08;Ubuntu高级选项&#xff09;&#xff0c;选中后按下Enter键 选择最高的Linux内核版本所对应的recovery mode模式&#xff0c;按e键编辑启动项 在…...

LaTex安装及配置(Windows)

LaTex安装及配置&#xff08;Windows&#xff09; 安装环境安装texlive下载texlive安装 编辑器安装texstudio下载texstudio安装 环境配置 使用第一个LaTex文档新建文件编程查看results 安装 环境安装 texlive下载 镜像清华源下载地址&#xff1a;https://mirrors.tuna.tsing…...

这才是满分毕业答辩PPT!

这才是满分毕业答辩PPT&#xff01; 2024年 毕业答辩论文指南 创新 正式 高效 正值毕业季&#xff0c;是不是很多同学&#xff0c;非常头疼如何进行论文答辩&#xff1f; 要想导师满意&#xff0c;顺利毕业&#xff0c;那么手里必须有份优秀的答辩PPT。这将是你的秘密武器&…...

【字典树(前缀树) 字符串】2416. 字符串的前缀分数和

本文涉及知识点 字典树&#xff08;前缀树) 字符串 LeetCode 2416. 字符串的前缀分数和 给你一个长度为 n 的数组 words &#xff0c;该数组由 非空 字符串组成。 定义字符串 word 的 分数 等于以 word 作为 前缀 的 words[i] 的数目。 例如&#xff0c;如果 words [“a”,…...

X-CSV-Reader:一个使用Rust实现CSV命令行读取器

&#x1f388;效果演示 ⚡️快速上手 依赖导入&#xff1a; cargo add csv读取实现&#xff1a; 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 是一个强大的开源数据可视化库&#xff0c;基于 JavaScript&#xff0c;能够创建丰富多彩的图表和交互数据展示。结合若依框架&#xff08;RuoYi&#xff09;&#xff0c;我们可以非常方便地将 ECharts 集成到系统中&#xff0c;实现数据的可视化展示。本文将详细介绍 …...

【机器学习】——线性模型

&#x1f4bb;博主现有专栏&#xff1a; C51单片机&#xff08;STC89C516&#xff09;&#xff0c;c语言&#xff0c;c&#xff0c;离散数学&#xff0c;算法设计与分析&#xff0c;数据结构&#xff0c;Python&#xff0c;Java基础&#xff0c;MySQL&#xff0c;linux&#xf…...

最全的Redis常用命令

Redis是一个开源的内存数据结构存储系统&#xff0c;用作数据库、缓存和消息代理。它支持多种类型的数据结构&#xff0c;如字符串&#xff08;strings&#xff09;、哈希&#xff08;hashes&#xff09;、列表&#xff08;lists&#xff09;、集合&#xff08;sets&#xff09…...

sourcetree推送到git上面

官网&#xff1a;Sourcetree | Free Git GUI for Mac and Windows 下载到1次提交 下载后打开 点击跳过 下一步 名字邮箱 点击clone 把自己要上传的代码粘贴到里面去 返回点击远程->点击暂存所有 加载完毕后&#xff0c;输入提交内容提交 提交完成了 2次提交 把文件夹内的…...

勒索病毒的策略与建议

随着网络技术的快速发展&#xff0c;勒索病毒攻击成为全球范围内日益严重的网络安全威胁。勒索病毒通过加密用户文件或锁定系统来勒索赎金&#xff0c;给个人和企业带来了巨大的损失。因此&#xff0c;了解如何应对勒索病毒攻击至关重要。本文将概述一些有效的防范措施和应对策…...

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两个类的属性完全相同&#xff0c;且遵循Java Bean的命名规范&#xff08;即具有相应的getter和setter方法&#xff09;&#xff0c;你可以利用一些库来简化转换过程&#xff0c;比如Apache BeanUtils或Spring Framework的BeanU…...

[Algorihm][简单多状态DP问题][买卖股票的最佳时机含冷冻期][买卖股票的最佳时机含手续费]详细讲解

目录 1.买卖股票的最佳时机含冷冻期1.题目链接买卖股票的最佳时机含冷冻期2.算法原理详解3.代码实现 2.买卖股票的最佳时机含手续费1.题目链接2.算法原理详解3.代码实现 1.买卖股票的最佳时机含冷冻期 1.题目链接 买卖股票的最佳时机含冷冻期 2.算法原理详解 思路&#xff…...

微服务:利用RestTemplate实现远程调用

打算系统学习一下微服务知识&#xff0c;从今天开始记录。 远程调用 调用order接口&#xff0c;查询。 由于实现还未封装用户信息&#xff0c;所以为null。 下面我们来使用远程调用用户服务的接口&#xff0c;然后封装一下用户信息返回即可。 流程图 配置类中注入RestTe…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具

文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

Web 架构之 CDN 加速原理与落地实践

文章目录 一、思维导图二、正文内容&#xff08;一&#xff09;CDN 基础概念1. 定义2. 组成部分 &#xff08;二&#xff09;CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 &#xff08;三&#xff09;CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 &#xf…...

技术栈RabbitMq的介绍和使用

目录 1. 什么是消息队列&#xff1f;2. 消息队列的优点3. RabbitMQ 消息队列概述4. RabbitMQ 安装5. Exchange 四种类型5.1 direct 精准匹配5.2 fanout 广播5.3 topic 正则匹配 6. RabbitMQ 队列模式6.1 简单队列模式6.2 工作队列模式6.3 发布/订阅模式6.4 路由模式6.5 主题模式…...

安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲

文章目录 前言第一部分&#xff1a;体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分&#xff1a;体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...

ZYNQ学习记录FPGA(一)ZYNQ简介

一、知识准备 1.一些术语,缩写和概念&#xff1a; 1&#xff09;ZYNQ全称&#xff1a;ZYNQ7000 All Pgrammable SoC 2&#xff09;SoC:system on chips(片上系统)&#xff0c;对比集成电路的SoB&#xff08;system on board&#xff09; 3&#xff09;ARM&#xff1a;处理器…...

使用SSE解决获取状态不一致问题

使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件&#xff0c;这个上传文件是整体功能的一部分&#xff0c;文件在上传的过程中…...