ES6参数默认值

1.参数是按顺序传递的,参数的默认值可以赋给任意位置的参数,给参数传undefined,参数才会使用默认值,例子如下:

function foo(a, b = 2, c = 3) {console.log(a, b, c);
}
foo() //undefined 2 3
foo(1, null, undefined) // 1 null 3function bar(a, b = 2, c) {console.log(a, b, c);
}
bar(1, 3); //1 3 undefined
bar(1, undefined, 3);//1 2 3

2.参数默认值修改了arguments的行为。arguments可以获取到函数参数列表,在严格模式下,修改了形参的值不影响arguments,但是非严格模式下,并且没有参数默认值的时候,修改了形参的值,arguments里对应的值也被修改了。另外arguments.length的取值是实际传给函数的参数个数。

function mixArgs(a, b) {console.log(arguments.length);console.log(a === arguments[0]);console.log(b === arguments[1]);a = 'alpha';b='beta';console.log(a === arguments[0]);console.log(b === arguments[1]);
}
mixArgs(1, 2);
// 3
// true
// true
// true
// true
"use strict";
function mixArgs2(a, b) {console.log(arguments.length);console.log(a === arguments[0]);console.log(b === arguments[1]);a = 'alpha';b='beta';console.log(a === arguments[0]);console.log(b === arguments[1]);
}
mixArgs2(1, 2);
// 3
// true
// true
// false
// falsefunction mixArgs3(a, b=2) {console.log(arguments.length);console.log(a === arguments[0]);console.log(b === arguments[1]);a = 'alpha';b='beta';console.log(a === arguments[0]);console.log(b === arguments[1]);
}
mixArgs3(1, 2);
// 3
// true
// true
// false
// false

3.参数默认值修改了函数的length的行为。length是函数声明的形参数量。但是当函数参数有默认值的时候,函数的length是函数参数第一个默认值前面的参数个数

function foo(a, b =2, c) {}
console.log(foo.length); // 1function foo1(a, b , c = 2) {}
console.log(foo1.length); // 2

4.默认值表达式。
函数的参数除了可以赋字面量外,还可以赋值表达式。表达式是在调用函数的时候运行。

let n = 1;
function getValue() {return n++;
}
function test(a, b = getValue()) {console.log(a, b);
}
test(1,2);// 1,2
test(1); //1 ,1  n:2
test(1); //1 ,2  n:3
test(1); //1 ,3  n:4
test(1); //1 ,4  n:5

5.参数默认值的暂时性死区
在let const变量声明之前有一个暂时性死区,是不能使用变量的。

console.log(a);
let a =1;  // ReferenceError: Cannot access 'a' before initialization

a变量有提升,但是为了不让变量声明前使用,才出来暂时性死区。参数默认值也是有暂时性死区

function getValue(v) {return v * 2;
}
function foo(a, b = getValue(a)) {console.log(a, b);
}
foo(1);// 1,2
//调用的时候 会运行
// let a=1;
// let b=getValue(a);
// 这段代码是合理的
foo(2);//2,4
function bar(a = getValue(b), b) {console.log(a, b);
}
bar(undefined, 1);// ReferenceError: Cannot access 'b' before initialization
//调用的时候 会运行
// let a=getValue(b);
// let b=1;
// 变量b在声明前使用了,导致错误

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

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

相关文章

XSS 与 CSRF 攻击——有什么区别,如何加以防护

跨站脚本(XSS)和跨站请求伪造(CSRF),它们将恶意脚本注入目标系统,以进一步利用技术栈或窃取用户数据。 什么是 XSS 和 CSRF? CSRF和XSS都是客户端攻击,它们滥用同源策略,利用web应用程序和受害用户之间的信任关系。XSS和跨站脚…

WPS二次开发系列:以自动播放模式打开PPT文档

在前面文章中 WPS SDK打开文档并实现保存回传 介绍了如何使用WPS SDK打开文档,那么我们是否能够实现在打开WPS 文档的时候能够传递一些参数来控制打开文档的行为呢,经过研究WPS SDK相关文档和API,最终实现了 以自动播放方式打开PPT文档功能。…

【RAG】内部外挂知识库搭建-本地GPT

大半年的项目告一段落了,现在自己找找感兴趣的东西学习下,看看可不可以搞出个效果不错的local GPT,自研下大模型吧 RAG是什么? 检索增强生成(RAG)是指对大型语言模型输出进行优化,使其能够在生成响应之前引用训练数据来…

Springboot集成token认证

一、引出session问题以及token、鉴权 session都是保存在内存中,认证用户增多,服务端开销明显增大。若是认证的记录保存在某台服务器内存中时,意味着用户的下次请求只能够在该服务器内存中进行认证。CSRF跨站攻击 token的鉴权机制&#xff1…

mysql--sql常用语句

通过profile命令来查看当前最主要的耗费时间的步骤。 mysql> select count(1) from t1; ---------- | count(1) | ---------- | 1 | ---------- 1 row in set (0.11 sec)mysql> show profiles; ----------------------------------------------- | Query_ID | Du…

Spring Cloud微服务入门(二)

微服务的技术栈 服务治理: 服务注册、发现、调用。 负载均衡: 高可用、集群部署。 容错: 避免雪崩、削峰、服务降级。 消息总线: 消息队列、异步通信,数据一致性。 网关: 校验路径、请求转发、服务集成…

Git 常用命令集

Git 常用命令集 符号说明&#xff1a; 尖括号&#xff08;< >&#xff09;表示需要替换成尖括号内文字描述的内容 方括号&#xff08;[ ]&#xff09;表示可选项 远程库名&#xff0c;形如 git.com 路径名&#xff0c;形如 D:\YouthGit\GitTest 或者 GitTest 1.初始化操…

【Web】2024红明谷CTF初赛个人wp(2/4)

目录 ezphp playground 时间原因只打了2个小时&#xff0c;出了2道&#xff0c;简单记录一下 ezphp 参考文章 PHP filter chains: file read from error-based oracle https://github.com/synacktiv/php_filter_chains_oracle_exploit 用上面的脚本爆出部分源码&#xff…

SSM项目转Springboot项目

SSM项目转Springboot项目 由于几年前写的一个ssm项目想转成springboot项目&#xff0c;所以今天倒腾了一下。 最近有人需要毕业设计转换一下&#xff0c;所以我有时间的话可以有偿帮忙转换&#xff0c;需要的私信我或&#xff0b;v&#xff1a;Arousala_ 首先创建一个新的spr…

蓝桥杯第793题——排水系统

题目描述 对于一个城市来说&#xff0c;排水系统是极其重要的一个部分。 有一天&#xff0c;小 C 拿到了某座城市排水系统的设计图。排水系统由 n 个排水结点&#xff08;它们从 1∼n 编号&#xff09;和若干个单向排水管道构成。每一个排水结点有若干个管道用于汇集其他排水…

git分支-基本分支与合并

问题假设 让我们通过一个简单的分支和合并的例子&#xff0c;演示在实际工作中可能会使用的工作流程。将按照以下步骤进行&#xff1a; 在网站上进行一些工作。为正在开发的新用户故事创建一个分支。在该分支上进行一些工作。 在这个阶段&#xff0c;我们可能会接到一个电话…

线上研讨会 | 应对汽车毫米波雷达设计中的电磁挑战

智能汽车、新能源汽车最近几年一直是汽车行业关注的热点&#xff0c;随着5G技术越来越普及&#xff0c;汽车智能化发展将越来越迅速。从传统汽车到智能汽车&#xff0c;不是简单功能的增强&#xff0c;而是从单一功能的交通工具变成可移动的办公和娱乐空间&#xff0c;成为物联…

STM32实现软件SPI对W25Q64内存芯片实现读写操作

先看看本次实验的成果吧&#xff1a; 这么简单的一个程序&#xff0c;我学习了一个星期左右&#xff0c;终于把所有的关节都打通了。所有代码都能什么都不看背着敲出来了。为了使自己的记忆更为清晰&#xff0c;特意总结了一个思维导图&#xff0c;感觉自己即便是日后忘记了看一…

[动态规划]代码随想录总结(自用)

文章目录 动态规划入门斐波那契数路径问题整数拆分动态规划在树中的应用 背包问题01背包完全背包 打家劫舍买卖股票的最佳时机&#xff08;状态转换&#xff09;最长子序列最长公共序列子序列有关&#xff08;删除元素&#xff09;回文子串 动态规划入门 斐波那契数 力扣相关…

机器学习的15个概念

机器学习 有监督学习 有监督学习是利用训练数据集进行预测的机器学习任务。有监督学习可以分为分类和回归。回归用于预测“价格”“温度”或“距离”等连续值&#xff0c;而分类用于预测“是”或“否”、“垃圾邮件”或“非垃圾邮件”、“恶性”或“良性”等类别。 分类包含…

如何保护IP地址?安全匿名上网的方法

当互联网成为每个家庭的重要组成部分后&#xff0c;IP地址就成了你的虚拟地址。您的请求从该地址开始&#xff0c;然后 Internet 将消息发送回该地址。那么&#xff0c;您担心您的地址被泄露吗&#xff1f; 对于安全意识高或者某些业务需求的用户&#xff0c;如果您正在寻找保护…

C++ 静态库与动态库的生成和使用:基于 VS Studio 生成 newmat 矩阵库的静态库与动态库

文章目录 Part.I IntroductionChap.I 预备知识Chap.II 静态库与动态库区分 Part.II 静态库的生成与使用 (newmat)Chap.I 生成静态库Chap.II 使用静态库 Part.III 动态库的生成与使用 (newmat)Chap.I 生成动态库Chap.II 使用动态库 Part.IV 文件内容Chap.I test.cpp (静态库)Cha…

Hadoop Yarn

首先先从Yarn开始讲起&#xff0c;Yarn是Hadoop架构的资源管理器&#xff0c;可以管理mapreduce程序的资源分配和任务调度。 Yarn主要有ResourceManager、NodeManage、ApplicationMaster&#xff0c;Container ResourceMange负责管理全局的资源 NodeManage&#xff08;NM&a…

九河云:在AWS上实现跨region VPC互联

如何跨region实现不同VPC之间的对等链接&#xff1f;九河云为您介绍AWS跨region连接方案。 说明&#xff1a;VPC-A位于弗吉尼亚region&#xff0c;VPC-B位于俄勒冈region 本文将在同一账户的弗吉尼亚和俄勒冈VPC中各启用一台EC2&#xff08;本文已提前创建好VPC、EC2等资源&am…

【PostgreSQL内核学习(二十九)—— 执行器(ExecProcNode)】

执行器&#xff08;ExecProcNode&#xff09; 概述ExecProcNode 函数ExecProcNodeFirst 函数PlanState 结构体 声明&#xff1a;本文的部分内容参考了他人的文章。在编写过程中&#xff0c;我们尊重他人的知识产权和学术成果&#xff0c;力求遵循合理使用原则&#xff0c;并在适…