【ES6新特性】默认参数常见用法

ES6新特性之默认参数的多种用法

🚀默认参数基础用法

在ES6中,我们可以直接在函数参数列表中为参数设置默认值:

// ES5的实现方式
function greet(name) {name = name || 'Guest';console.log(`Hello, ${name}!`);
}// ES6默认参数写法
function greet(name = 'Guest') {console.log(`Hello, ${name}!`);
}greet(); // Hello, Guest!
greet('Alice'); // Hello, Alice!

特性说明:

  • 默认值仅在参数为undefined时生效
  • null会被认为是一个有效值,不会触发默认值
  • 默认参数可以是任意表达式

🚀默认参数的进阶用法

1. 结合解构赋值

// 对象解构默认值
function setOptions({ width = 100, height = 200, color = '#fff' 
} = {}) {console.log(width, height, color);
}setOptions({ width: 500 }); // 500 200 #fff
setOptions(); // 100 200 #fff// 数组解构默认值
function getFirst([firstItem = 0] = []) {return firstItem;
}

2. 后置参数默认值

function createElement(tag = 'div', content) {const elem = document.createElement(tag);elem.textContent = content;return elem;
}// 必须显式传递undefined才能使用默认值
const div = createElement(undefined, 'Hello');

3. 动态默认值

function generateId(prefix = 'id', random = Math.random().toString(36).slice(2)) {return `${prefix}_${random}`;
}console.log(generateId()); // id_1a2b3c
console.log(generateId('user')); // user_4d5e6f

🚀默认参数的作用域

1. 参数顺序依赖

function tricky(a = 1, b = a * 2) {console.log(a, b);
}tricky();     // 1 2
tricky(3);    // 3 6
tricky(2, 4); // 2 4

2. 暂时性死区(TDZ)

function example(a = b, b = 2) {// ❌ 错误:Cannot access 'b' before initialization
}function validExample(a = 2, b = a * 3) {// ✅ 正确
}

🚀实际应用场景

1. 配置项合并

function initPlugin(options = {}) {const defaults = {debug: false,maxRetry: 3,timeout: 5000};return { ...defaults, ...options };
}

2. API请求参数处理

async function fetchData({url = '/api/data',method = 'GET',headers = { 'Content-Type': 'application/json' }
} = {}) {try {const response = await fetch(url, { method, headers });return response.json();} catch (error) {console.error('Request failed:', error);}
}

🚀注意事项

  1. 箭头函数的默认参数:
const multiply = (a = 1, b = 1) => a * b;
  1. 默认参数不计入函数length属性:
function demo(a, b = 1, c) {}
console.log(demo.length); // 1
  1. 默认值表达式在每次调用时重新计算:
function getTime(now = Date.now()) {return now;
}console.log(getTime() === getTime()); // false

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

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

相关文章

LORA的AB矩阵是针对Transformer的多头还是MLP

LORA的AB矩阵是针对Transformer的多头还是MLP Transformer中的矩阵是一个整体还是分开的每个小矩阵 在LORA(Low-Rank Adaptation)中,AB矩阵的应用位置和Transformer中的矩阵拆分方式如下: 1. LORA的AB矩阵作用对象 LORA的AB矩阵主要作用于Transformer的多头注意力模块和…

【大模型基础_毛玉仁】2.4 基于 Encoder-Decoder 架构的大语言模型

更多内容:XiaoJ的知识星球 目录 2.4 基于 Encoder-Decoder 架构的大语言模型2.4.1 Encoder-Decoder 架构2.4.2 T5 语言模型1)T5 模型结构2)T5 预训练方式3)T5 下游任务 2.4.3 BART 语言模型1)BART 模型结构2&#xff0…

browser-use WebUI + DeepSeek 基于AI的UI自动化解决方案

browser-use WebUI 一、browser-use是什么Browser-use采用的技术栈为: 二、browser-use webui 主要功能使用场景 三、使用教程1.python 安装2、把项目clone下来3、安装依赖4、配置环境5、启动6、配置1.配置 Agent2.配置要用的大模型3.关于浏览器的一些设置 四、Deep…

WPF CommunityToolkit.MVVM库的简单使用

CommunityToolkit.MVVM 是 .NET 社区工具包中的一部分,它为实现 MVVM(Model-View-ViewModel)模式提供了一系列实用的特性和工具,能帮助开发者更高效地构建 WPF、UWP、MAUI 等应用程序。以下是关于它的详细使用介绍: 1…

Windows安装Apache Maven 3.9.9

第一步下载资源 官网:下载 Apache Maven – Maven 环境变量配置 M2_HOME 指向bin目录 MAVEN_HOME 指向根目录 M2_HOME 不确定是否必须要 Path配置 ,需要注意MAVEN顺序应当在java之前 验证是否安装成功,在cmd中以管理员方式打开&#xff0c…

【spring-boot-starter-data-neo4j】创建结点和查找结点操作

配置连接neo4j # application.properties spring.neo4j.uribolt://localhost:7687 spring.neo4j.authentication.usernameneo4j spring.neo4j.authentication.password你的密码定义实体类 package com.anmory.platform.GraphService.Dao;import org.springframework.data.neo…

pytorch小记(十三):pytorch中`nn.ModuleList` 详解

pytorch小记(十三):pytorch中nn.ModuleList 详解 PyTorch 中的 nn.ModuleList 详解1. 什么是 nn.ModuleList?2. 为什么不直接使用普通的 Python 列表?3. nn.ModuleList 的基本用法示例:构建一个包含两层全连…

Excel导出工具类--复杂的excel功能导出(使用自定义注解导出)

Excel导出工具类 前言: 简单的excel导出,可以用easy-excel, fast-excel, auto-poi,在导出实体类上加上对应的注解,用封装好的工具类直接导出,但对于复杂的场景, 封装的工具类解决不了,要用原生的excel导出(easy-excel, fast-excel, auto-poi都支持原生的) 业务场景: 根据…

批量测试IP和域名联通性2

在前面批量测试IP和域名联通性-CSDN博客的基础上,由于IP和域名多样性,比如带端口号的192.168.1.17:17,实际上应该ping 192.168.1.17。如果封禁http://www.abc.com/a.exe,实际可ping www.abc.com。所以又完善了代码。 echo off se…

国产编辑器EverEdit - 语法着色文件的语法

1 语法着色定义(官方文档) 1.1 概述 EverEdit有着优异的语法着色引擎,可以高亮现存的绝大多数的编程语言。在EverEdit的语法着色中有Region和Item两个概念,Region表示着不同的区块。而Item则代表着这些区块中不同的部分。一般情况下,Region…

Excel处理控件Aspose.Cells教程:如何自动将 HTML 转换为 Excel

在处理 HTML 表中呈现的结构化数据时,将 HTML 转换为 Excel 是一种常见需求。无论您是从网站、报告还是任何其他来源提取数据,将其转换为 Excel 都可以更好地进行分析、操作和共享。 开发人员通常更喜欢使用编程方法将 HTML 转换为 Excel,因…

基于springbo校园安全管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 随着信息时代的来临,过去信息校园安全管理方式的缺点逐渐暴露,本次对过去的校园安全管理方式的缺点进行分析,采取计算机方式构建校园安全管理系统。本文通过阅读相关文献,研究国内外相关技术,提出了一种集进出校…

vim在连续多行行首插入相同的字符

工作中经常需要用vim注释掉一段代码或者json文件中的一部分,需要在多行前面插入//或者#符号。在 Vim 中,在连续多行行首插入相同字符主要有以下两种方法: Visual Block 模式插入 将光标移到要插入相同内容的第一行的行首24。按下Ctrl v进入…

Git 实战指南:本地客户端连接 Gitee 全流程

本文将以 Gitee(码云)、系统Windows 11 为例,详细介绍从本地仓库初始化到远程协作的全流程操作 目录 1. 前期准备1.1 注册与配置 Gitee1.2 下载、安装、配置客户端1.3 配置公钥到 Gitee2. 本地仓库操作(PowerShell/Git Bash)2.1 初始化本地仓库2.2 关联 Gitee 远程仓库3. …

Pytest项目_day01(HTTP接口)

HTTP HTTP是一个协议(服务器传输超文本到浏览器的传送协议),是基于TCP/IP通信协议来传输数据(HTML文件,图片文件,查询结果等)。 访问域名 例如www.baidu.com就是百度的域名,我们想…

MySQL超详细介绍(近2万字)

1. 简单概述 MySQL安装后默认有4个库不可以删除,存储的是服务运行时加载的不同功能的程序和数据 information_schema:是MySQL数据库提供的一个虚拟的数据库,存储了MySQL数据库中的相关信息,比如数据库、表、列、索引、权限、角色等…

SQLMesh宏操作符深度解析:掌握@star与@GENERATE_SURROGATE_KEY实战技巧

引言:解锁SQLMesh的动态查询能力 在复杂的数据处理场景中,手动编写重复性SQL代码不仅效率低下,还难以维护。SQLMesh作为新一代数据库中间件,通过其强大的宏系统赋予开发者编程式构建查询的能力。本文将重点解析两个核心操作符——…

超详细kubernetes部署k8s----一台master和两台node

一、部署说明 1、主机操作系统说明 2、主机硬件配置说明 二、主机准备(没有特别说明都是三台都要配置) 1、配置主机名和IP 2、配置hosts解析 3、防火墙和SELinux 4、时间同步配置 5、配置内核转发及网桥过滤 6、关闭swap 7、启用ipvs 8、句柄…

高光谱相机在水果分类与品质检测中的应用

一、核心应用领域 ‌外部品质检测‌ ‌表面缺陷识别:通过400-1000nm波段的高光谱成像,可检测苹果表皮损伤、碰伤等细微缺陷,结合图像分割技术实现快速分类‌。 ‌损伤程度评估:例如青香蕉的碰撞损伤会导致光谱反射率变化&#…

【蓝桥杯每日一题】3.17

🏝️专栏: 【蓝桥杯备篇】 🌅主页: f狐o狸x 他们说内存泄漏是bug,我说这是系统在逼我进化成SSR级程序员 OK来吧,不多废话,今天来点有难度的:二进制枚举 二进制枚举,就是…