函数参数那些事 - JS

形参?实参?

  1. 形参:形式参数,函数声明时使用的参数,在调用时用于接收实参值的变量;
  2. 实参:实际参数,函数调用时,以值传递的方式发送给形参,可以是任何数据。
  1. 注意:
  • 形参和实参个数不需要一致,
    • 缺少实参会以 undefined 代替,
    • 缺少形参,多余的实参也会被 arguments 对象接收到;
  • 值类型和引用类型的数据都是以值传递的方式传参,
    • 值类型,直接将值赋值给形参声明的变量,
    • 引用类型,将地址赋值给形参声明的变量,可能会影响原数据。
let o = {}
let o1 = {}function test1(obj) {obj.fizz = '嘶嘶'	// 修改原数据
}
function test2(obj) {obj = { fizz: '' }	// 不修改原数据,只是形参指针的指向不了
}test1(o)
console.log(o)	// { fizz: '嘶嘶' }
test2(o1)
console.log(o1)	// {}

arguments 对象

  1. 类数组对象,所有函数(箭头函数除外)函数体中都能使用的一个局部变量;
  2. 所有实参的数据,按照次序放入 arguments,通过索引(0,1,2,…)读写;
  3. 非严格模式下,存在复杂参时(默认参数、剩余参数、解构赋值参数),所有参数的行为都不会被 arguments 跟随;
  4. 使用解构赋值参数,arguments 会存储整个数据,而不是分别存储提取的数据;
  5. arguments 还有其他属性和方法,诸如 lengthcallee 等。
/* 存在复杂参数(非严格模式下) */
function f(a, ...r) {console.log(arguments[0], arguments[1]);a = 99;			// arguments[0] 不会修改r[0] = 99;		// arguments[1] 不会修改console.log(arguments[0], arguments[1]);
}
f(1, 2, 3)			// 输出 1,2; 1,2/* 不存在复杂参数(非严格模式下) */
function g(a, b) {console.log(arguments[0], arguments[1]);a = 99;			// arguments[0] 会修改b = 99;			// arguments[1] 会修改console.log(arguments[0], arguments[1]);
}
g(1, 2)				// 输出 1,2; 99,99/* 解构赋值参数 */
const writer = { id: 12, name: 'Li Hua' }
function h({ id, name }) {console.log(arguments[0], arguments.length);
}
h(writer)			// 打印 { id: 12, name: 'Li Hua' }, 1(不是2)

默认参数

在参数列表中 = 的右端提供默认值。

function f(a=1, [b, c=b], { d=a }, ...rest) { return d; }
f(10, [], {})	// 10

剩余参数

就是将剩余的参数以数组的方式收纳起来;必须放在最后。

function g(a, ...rest) { return rest; }
g(1, 2, 3, 4)	// [2, 3, 4]

解构赋值参数

就是提取到指定数据,进行指定传参。

let arr = [1, 2, 30]
const w = { name: 'Li Hua', gender: 0, score: 100 };function h([a, ,c], { name, score }) {console.log(a, c, name, score);
} 

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

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

相关文章

企业级大模型的护城河:RAG + 微调

围绕LLM的炒作是前所未有的,但这是有道理的,生成式 AI 有潜力改变我们所知道的社会。 在很多方面,LLM将使数据工程师变得更有价值——这令人兴奋! 不过,向老板展示数据发现工具或文本到 SQL 生成器的炫酷演示是一回事…

CTF-WEB的知识体系

CTF概念 CTF是Capture The Flag的缩写,中文一般译作夺旗赛 CTF起源于1996年DEFCON全球黑客大会 DEFCONCTF是全球技术水平和影响力最高的CTF竞赛 竞赛模式 解题模式:解决网络安全技术挑战(即找到flag),提交后获取相应分值。 攻防赛模式:要求找到其他队…

故障诊断 | 一文解决,CNN卷积神经网络故障诊断(Matlab)

文章目录 效果一览文章概述专栏介绍源码设计参考资料效果一览 文章概述 故障诊断 | 一文解决,CNN卷积神经网络故障诊断(Matlab) 专栏介绍 订阅【故障诊断】专栏,不定期更新机器学习和深度学习在故障诊断中的应用;订阅

TWS耳机产品有哪些芯片?这就告诉你

随着时代发展,越来越多消费者开始追捧TWS耳机,相比其他耳机,TWS耳机轻便易带,小巧精密。为了满足TWS耳机这些特点,需要配备多种核心芯片,那么你知道有哪些芯片吗? 1、主控芯片主控芯片是TWS耳机…

[GN] 23种设计模式 —— 常见设计模式学习总结

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言创建型模式 —— 创建的艺术结构型模式 —— 组合的艺术适配器模式 -- 不兼容结构的协调对象适配器类适配器模式优缺点适用场景 组合模式 -- 树形结构的处理例子…

4. 网络安全基础与网络接入

4.1 实验一:访问控制列表配置实验 4.1.1 实验介绍 4.1.1.1 关于本实验 访问控制列表 ACL(Access Control List)是由一条或多条规则组成的集合。所谓规则,是指描述报文匹配条件的判断语句,这些条件可以是报文的源地址…

代码签名证书主要是用来做什么的?

代码签名证书是一种用于数字签名和验证软件代码的安全工具。它用于为软件开发者提供身份认证、数据完整性和代码真实性的机制,确保用户下载和安装的软件是来自可信的发布者,未经篡改并且没有潜在的恶意代码。 首先,代码签名证书可以提供身份认…

数据治理之法读书笔记

数据治理之法 一、数据基础设施 当今,世界正快速由工业经济时代迈向“数化万物、智化生存”的数字经济时代。 数据基础设施尚没有统一的概念。 从狭义上讲,数据基础设施是指支撑数据运转的相关软硬件资源,如数据中台、数据仓库、数据湖等…

npm 以组织为单位发布依赖包(@username/package-name、@org-name/package-name)

示例: ant-design/aliyun-theme ant-design/antd-theme-variable ant-design/charts // ...1. 注册组织 在官网注册相应的组织,npmjs.com 以个人账号登录。点击头像找到 Add Organization,填写相关信息,创建完成。 2. 发布 首…

【unity小技巧】unity3d创建和实现破碎打破物品,万物可破碎

文章目录 破碎插件可破碎的物品代码控制加入破坏力完结 破碎插件 关于物品破碎,其实之前已经分享过一个免费插件,如果没有碎片化的模型,可以选择使用这个插件: OpenFracture插件实现unity3d物体破裂和切割 可破碎的物品 代码控制…

解密Android某信聊天记录

前置条件 frida, frida-tools, adb 获取密码 h.js console.log(script loaded successfully);function xx() {function strf(str, replacements) {return str.replace(/\$\{\w\}/g, function(placeholderWithDelimiters) {var placeholderWithoutDelimiters placeholderWi…

山石防火墙简单配置

1、设备管理 安全网关支持本地与远程两种环境配置方法,可以通过CLI 和WebUI 两种方式进行配置。CLI 同时支持Console、Telnet、SSH 等主流通信管理协议。 1.1终端console 登录 通过Console 口配置安全网关时需要在计算机上运行终端仿真程序(系统的超级…

数字孪生智慧能源电力Web3D可视化云平台合集

前言 能源电力的经济发展是中国式现代化的强大动力,是经济社会发展的必要生产要素,电力成本变化直接关系到工业生产、交通运输、农业生产、居民生活等各个方面,合理、经济的能源成本能够促进社会用能服务水平提升、支撑区域产业发展&#xf…

测试左移是什么?执行它有哪些好处?

前言 大家好,我是chowley,今天来介绍一下,目前多数开发者团队都在执行的一种理念—测试左移! 测试左移 在软件开发领域,测试左移是一种开发实践,强调在编写实际代码之前先编写测试用例。这种方法有助于提…

深度学习的进展

深度学习的进展 深度学习是人工智能领域的一个重要分支,它利用神经网络模拟人类大脑的学习过程,通过大量数据训练模型,使其能够自动提取特征、识别模式、进行分类和预测等任务。近年来,深度学习在多个领域取得了显著的进展,尤其在自然语言处理、计算机视觉、语音识别和机…

replaceAll 的用法总结

replaceAll 的用法总结 大家好,我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编,今天我们将深入探讨Java中字符串操作的一个强大工具 —— replaceAll 方法。这个方法在处理字符串替换时非常有用,让我们一起了解其基本用法和一些…

【postgres】10、INDEX Types 索引

文章目录 11.2 Index Types11.2.3 GiST https://www.postgresql.org/docs/current/indexes-types.html 11.2 Index Types 11.2.3 GiST GIST索引不是一种单一的索引,而是一种基础设施,在其中可以实现许多不同的索引策略。因此,可以使用GIST索…

为什么每天上班明明没做什么体力活,却仍感觉到身体好累?

​为什么每天上班明明没做什么体力活,却仍感觉到身体好累? 在现代社会,许多人在工作中并不需要从事繁重的体力劳动,然而,他们却常常感到身体疲惫不堪。这种情况不仅发生在办公室工作的人群中,也普遍存在于…

MySQL--表数据的添加和查询操作

题目: 1. 基于当前的四张表 完成数据的添加操作(每张表添加两条数据)2. 完成查询操作(课堂内所有Demo) 1-2. 根据生日降序(DESC)[升序ASC]排序查看各学生信息: SELECT * FROM student ORDER BY BORNDate DESC; #LIMIT 初始行数…

关于我用AI编写了一个聊天机器人……(7)

此次更新为v1.3.4版本&#xff0c;更新内容&#xff1a;增加显示时间功能 代码如下&#xff1a; #include <bits/stdc.h> #include <ctime> using namespace std; string userInput; class VirtualRobot { public:void chat() {cout << "你好&#x…