NodeJs 箭头函数:`()=>{}` 和 `()=>()` 的区别与使用场景

在 JavaScript 中,箭头函数(Arrow Function)是一种简洁的函数写法,它不仅可以减少代码量,还能避免 this 绑定的问题。然而,箭头函数有两种常见的写法:()=>{}()=>()。这两种写法虽然看起来很相似,但在实际使用中有一些关键区别。本文将详细解析它们的区别,并帮助你更好地理解如何选择合适的写法。


1. ()=>{}:块级作用域的箭头函数

语法

()=>{} 是一种带有块级作用域的箭头函数写法。函数体被包裹在 {} 中,可以包含多行代码。

返回值

  • 如果函数体使用 {},则需要在函数体内显式使用 return 语句来返回值。

  • 如果没有 return,函数默认返回 undefined

适用场景

适合需要执行多条语句或复杂逻辑的情况。

示例

const func1 = () => {console.log("Hello");return 42; // 显式返回 42};console.log(func1()); // 输出: Hello 42

如果没有 return,函数会返回 undefined


const func2 = () => {console.log("Hello");// 没有 return};console.log(func2()); // 输出: Hello undefined

2. ()=>():隐式返回的箭头函数

语法

()=>() 是一种隐式返回的箭头函数写法。函数体是一个表达式,用 () 包裹。

返回值

  • 函数会自动返回表达式的值,不需要显式写 return

  • 如果返回的是一个对象,需要用 () 包裹对象字面量,因为 {} 会被解释为函数体。

适用场景

适合单行逻辑或直接返回一个值的情况。

示例

const func3 = () => (42); // 隐式返回 42console.log(func3()); // 输出: 42

返回对象时需要用 () 包裹:


const func4 = () => ({ key: "value" }); // 隐式返回对象console.log(func4()); // 输出: { key: "value" }

3. 对比总结

| 特性 | ()=>{} | ()=>() |

|--------------------|------------------------------|------------------------------|

| 函数体 | 块级作用域 {} | 表达式 () |

| 返回值 | 需要显式 return | 隐式返回表达式的值 |

| 适用场景 | 多行逻辑或复杂操作 | 单行逻辑或直接返回值 |


4. 如何选择?

  • 使用 ()=>{} 的场景

- 函数体包含多行代码。

- 需要执行复杂的逻辑操作。

- 需要显式控制返回值。

  • 使用 ()=>() 的场景

- 函数体只有一行代码。

- 需要直接返回一个值或表达式。

- 代码需要更简洁的写法。


5. 实际应用示例

示例 1:多行逻辑


const calculate = (a, b) => {const sum = a + b;const product = a * b;return { sum, product }; // 返回一个对象};console.log(calculate(2, 3)); // 输出: { sum: 5, product: 6 }

示例 2:单行逻辑


const double = (x) => (x * 2); // 隐式返回console.log(double(5)); // 输出: 10

示例 3:返回对象


const createUser = (name, age) => ({name,age,isAdult: age >= 18,});console.log(createUser("Alice", 20)); // 输出: { name: "Alice", age: 20, isAdult: true }

6. 总结

()=>{}()=>() 是 JavaScript 中箭头函数的两种常见写法,它们的主要区别在于函数体的结构和返回值的方式。理解它们的区别后,你可以根据实际需求选择更合适的写法,从而编写出更简洁、高效的代码。

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

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

相关文章

python制作翻译软件

本文复刻此教程:制作属于自己的翻译软件-很简单【Python】_哔哩哔哩_bilibili 一、明确需求(以搜狗翻译为例) (1)网址:https://fanyi.sogou.com/text (2) 数据:翻译内容…

【C++】20.二叉搜索树

文章目录 1. 二叉搜索树的概念2. 二叉搜索树的性能分析3. 二叉搜索树的插入4. 二叉搜索树的查找5. 二叉搜索树的删除6. 二叉搜索树的实现代码7. 二叉搜索树key和key/value使用场景7.1 key搜索场景:7.2 key/value搜索场景:7.3 主要区别:7.4 ke…

Opencv图片的旋转和图片的模板匹配

图片的旋转和图片的模板匹配 目录 图片的旋转和图片的模板匹配1 图片的旋转1.1 numpy旋转1.1.1 函数1.1.2 测试 1.2 opencv旋转1.2.1 函数1.2.2 测试 2 图片的模板匹配2.1 函数2.2 实际测试 1 图片的旋转 1.1 numpy旋转 1.1.1 函数 np.rot90(kl,k1),k1逆时针旋转9…

重温设计模式--13、策略模式

策略模式介绍 文章目录 策略模式介绍C 代码示例 策略模式是一种行为设计模式,它允许在运行时选择算法的行为。该模式将算法的定义和使用分离开来,使得算法可以独立于使用它的客户端而变化,提高了代码的灵活性和可维护性。 其主要包含以下几个…

【GOOD】A Survey of Deep Graph Learning under Distribution Shifts

深度图学习在分布偏移下的综述:从图的分布外泛化到自适应 Northwestern University, USA Repository Abstract 图上的分布变化——训练和使用图机器学习模型之间的数据分布差异——在现实世界中普遍存在,并且通常不可避免。这些变化可能会严重恶化模…

【Axure高保真原型】环形进度条(开始暂停效果)

今天和大家分享环形进度条(开始暂停效果)的原型模版,效果包括: 点击开始按钮,可以环形进度条开始读取,中部百分比显示环形的读取进度; 在读取过程中,点击暂停按钮,可以随…

Euler 21.10(华为欧拉)安装oracle19c-RAC

1. Euler 21.10安装oracle19c-RAC 1.1. 环境规划 1.1.1. 主机规划 hostname IP 实例名 hfdb90 192.168.40.90 hfdb1 hfdb91 192.168.40.90 hfdb2 系统版本 BigCloud Enterprise Linux For Euler 21.10 (GNU/Linux 4.19.90-2107.6.0.0100.oe1.bclinux.x86_64 x86_6…

【python】matplotlib(radar chart)

文章目录 1、功能描述和原理介绍2、代码实现3、效果展示4、完整代码5、多个雷达图绘制在一张图上6、参考 1、功能描述和原理介绍 基于 matplotlib 实现雷达图的绘制 一、雷达图的基本概念 雷达图(Radar Chart),也被称为蛛网图或星型图&…

Business Cooperation Process

Business Cooperation Process 商务合作基本流程 并不是每个人都能做到言而有信的,因此还是需要流程来约束的。

模式识别-Ch2-分类错误率

分类错误率 最小错误率贝叶斯决策 样本 x x x的错误率: 任一决策都可能会有错误。 P ( error ∣ x ) { P ( w 2 ∣ x ) , if we decide x as w 1 P ( w 1 ∣ x ) , if we decide x as w 2 P(\text{error}|\mathbf{x})\begin{cases} P(w_2|\mathbf{x}), &…

Milvus×全诊通:从导诊到智能超声,如何将人效比翻倍

AI与智慧医疗的结合已是未来发展的必然趋势。近年来,国家卫健委推崇智慧医疗和AI技术,如智能导诊、预问诊、辅助诊断等,以提高医疗服务效率和诊断准确性,改善患者就医体验。 全诊通是一家专注于医疗SaaS和人工智能的公司&#xff…

自动驾驶相关知识学习笔记

一、概要 因为想知道SIL、HIL是什么仿真工具,故而浏览了自动驾驶相关的知识。 资料来源《自动驾驶——人工智能理论与实践》胡波 林青 陈强 著;出版时间:2023年3月 二、图像的分类、分割与检测任务区别 如图所示,这些更高阶的…

springcloud 介绍

Spring Cloud是一个基于Spring Boot的微服务架构解决方案集合,它提供了一套完整的工具集,用于快速构建分布式系统。在Spring Cloud的架构中,服务被拆分为一系列小型、自治的微服务,每个服务运行在其独立的进程中,并通过…

【PLL】非线性瞬态性能

频率捕获、跟踪响应,是大信号非线性行为锁相范围内的相位、频率跟踪,不是非线性行为 所以:跟踪,是线性区域;捕获,是大信号、非线性区域 锁定范围:没有周跳(cycle-slipping&#xff0…

QML学习(七) 学习QML时,用好Qt设计器,快速了解各个组件的属性

在初步学习QML时,特别建议看看Qt设计器,先利用Qt Quick设计师的使用,快速的对Qt Quick的各个组件及其常用的属性,有个初步的了解和认识。如果初始学习一上来直接以代码形式开干,很容易一头雾水。而设计器以最直白的所见…

find 查找文件grep匹配数据

一、find介绍 1. find . -iname "*.txt"查找当前目录下各个文件夹下的txt属性的文件(i忽略大小写)。 2.find . -type f 查找当前目录下各个文件夹下的文件 3.find . -type d 查找当前目录下各个文件夹下的目录 4.find . -type f | xargs grep -ain -E "匹配…

Mac上鸿蒙配置HDC报错:zsh: command not found: hdc -v

这个问题困扰了好久,按照官方文档去配置的,就是会一直报错,没有配置成功,主要原因是官网ide的路径可能和你本地的ide的路径不一致,因为官网的ide版本可能是最新的 一.先查找你本地的toolchains目录在哪里,…

CS·GO搬砖流程详细版

说简单点,就是Steam买了然后BUFF上卖,或许大家都知道这点,但就是一些操作和细节问题没那么明白。我相信,你看完这篇文章以后,至少会有新的认知。 好吧,废话少说,直接上实操! 首先准…

“深入浅出”系列之FFmpeg:(1)音视频开发基础

我的音视频开发大部分内容是跟着雷霄骅大佬学习的,所以笔记也是跟雷老师的博客写的。 一、音视频相关的基础知识 首先播放一个视频文件的流程如下所示: FFmpeg的作用就是将H.264格式的数据转换成YUV格式的数据,然后SDL将YUV显示到电脑屏幕上…

【Linux】Linux开发:GDB调试器与Git版本控制工具指南

Linux相关知识点可以通过点击以下链接进行学习一起加油!初识指令指令进阶权限管理yum包管理与vim编辑器GCC/G编译器make与Makefile自动化构建 在 Linux 开发中,GDB 调试器和 Git 版本控制工具是开发者必备的利器。GDB 帮助快速定位代码问题,G…