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.pswp.cn/web/65369.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/65369.shtml
英文地址,請注明出處:http://en.pswp.cn/web/65369.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

緩存-Redis-緩存更新策略-主動更新策略-Cache Aside Pattern(全面 易理解)

**Cache-Aside Pattern(旁路緩存模式)**是一種廣泛應用于緩存管理的設計模式,尤其在使用 Redis 作為緩存層時尤為常見。該模式通過在應用程序與緩存之間引入一個旁路,確保數據的一致性和高效性。本文將在之前討論的 Redis 主動更新…

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…

vue3探索——使用ref與$parent實現父子組件間通信

在vue3中,可以使用vue3的API defineExpose()函數結合ref或者$parent,實現父子組件數據的傳遞。 子組件向父組件傳遞數據defineExpose()和ref 子組件:通過defineExpose() 函數,向外暴露響應式數據或者方法 // src/components/son…

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 代碼示例 策略模式是一種行為設計模式,它允許在運行時選擇算法的行為。該模式將算法的定義和使用分離開來,使得算法可以獨立于使用它的客戶端而變化,提高了代碼的靈活性和可維護性。 其主要包含以下幾個…

計算機基礎知識復習1.5

標記-清除算法:標記-清除分為標記 和清除 兩個階段,首先通過可達性分析,標記出所有需要回收的對象,然后統一回收所有被標記的對象。 復制算法:為了解決碎片空間的問題,出現了復制算法 將內存分成兩塊&…

SQL Server 中的覆蓋索引

1. 覆蓋索引的工作原理 當查詢只涉及索引中已經包含的列時,SQL Server 可以直接使用索引來返回查詢結果,而不需要回表到數據頁去檢索實際的數據行。覆蓋索引因此能夠顯著減少 I/O 操作,提高查詢效率。 例如,假設有一個表 Employ…

Golang開發-案例整理匯總

前言 CSDN的文章缺少一個索引所有文章分類的地方,所以手動創建這么一個文章匯總的地方,方便查找。Golang開發經典案例匯總 GoangWeb開發 GolangWeb開發- net/http模塊 GolangWeb開發-好用的HTTP客戶端httplib(beego) GolangWeb開發- Gin不使用Nginx部署Vue項目 Golang并發開…

交叉編譯的核心原理與核心概念

什么是交叉編譯? 交叉編譯(Cross Compilation)是一種在一種計算機體系結構或操作系統(主機,Host)上生成另一種計算機體系結構或操作系統(目標,Target)上的可執行文件的過…

vue-codemirror定位光標位置并在光標處插入信息

業務場景:在代碼編輯器外點擊按鈕,向代碼編輯器內的光標處新增一條拼接好的信息。 getCursor方法: 官方文檔: doc.getCursor(?start: string) → {line, ch} Retrieve one end of the primary selection. start is an optional string indicating which end of the select…

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

深度圖學習在分布偏移下的綜述:從圖的分布外泛化到自適應 Northwestern University, USA Repository Abstract 圖上的分布變化——訓練和使用圖機器學習模型之間的數據分布差異——在現實世界中普遍存在,并且通常不可避免。這些變化可能會嚴重惡化模…

『SQLite』解釋執行(Explain)

摘要:本節主要講解SQL的解釋執行:Explain。 在 sqlite 語句之前,可以使用 “EXPLAIN” 關鍵字或 “EXPLAIN QUERY PLAN” 短語,用于描述表查詢的細節。 基本語法 EXPLAIN 語法: EXPLAIN [SQLite Query]EXPLAIN QUER…

(一)使用 WebGL 繪制一個簡單的點和原理解析

使用 WebGL 繪制一個簡單的點,我們需要通過 WebGL 的管線來進行一系列的步驟。以下是實現的詳細步驟和原理解析: WebGL 繪制點的基本步驟 初始化 WebGL 上下文 首先,我們需要獲取 WebGL 上下文,這樣才能進行所有的繪圖操作。通常…

Vue路由跳轉報錯

說明:使用 Vue 的router.replace/push,若跳轉到當前路由,控制臺會報錯如下:NavigationDuplicated: Avoided redundant navigation to current location 原因:Vue-router在3.1之后把$router.push()方法改為了Promise。所…

【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),也被稱為蛛網圖或星型圖&…

(三)通過WebGL繪制一個簡單的三角形來理解渲染管線

理解 WebGL 繪圖原理的關鍵是了解它的渲染管線。WebGL 渲染管線實際上是由多個階段組成的,每個階段都有特定的任務,最終輸出的是屏幕上的圖像。為了讓你能輕松理解這些原理,我將通過一個簡單的例子來詳細解釋。 繪制一個簡單的三角形 我們將…

【shell編程】報錯信息:bash: bad file descriptor(包含6種解決方法)

大家好,我是搖光~ 在運行 Shell 腳本時,遇到 bash: bad file descriptor 錯誤通常意味著腳本嘗試對一個無效或不可用的文件描述符(file descriptor)執行了讀寫操作。 以下是一些可能導致這個問題的原因、詳細案例以及相應的解決…