throw 和return的區別,A函數里面執行B函數 B函數異常后 不再執行A函數

function aFun() {try {bFun();console.log(22222222222);} catch (e) {// 如果bFun中拋出異常,中止aFun的執行console.log(e.message);}
}function bFun() {let a = 1, b = 1;if (a === b) {throw new Error('Stopped by bFun'); // 拋出異常,停止aFun}// bFun 中可能還有很多代碼console.log('Executing rest of bFun');
}// 測試調用
aFun(); // 此時將不會輸出22222222222, 而是輸出Stopped by bFun

throwreturn 是 JavaScript 中兩種完全不同的控制流機制,使用它們的區別主要在于它們的目的和作用范圍:

return

  • 目的:用于從函數中返回一個值,并終止該函數的執行。
  • 作用范圍:僅在函數內有效。
  • 使用場景:在需要從函數中返回一個值或提前退出函數時使用。
function exampleReturn() {console.log("Before return");return "Returning value"; // 返回值,并終止函數執行console.log("After return"); // 不會執行
}let result = exampleReturn();
console.log(result); // 輸出: "Returning value"

throw

  • 目的:用于拋出一個異常,終止當前代碼的執行,并將控制權交給最近的異常處理器(通常是 try...catch 語句)。
  • 作用范圍:可以在任何地方使用,不局限于函數內部;會傳播到調用堆棧的上層,直到找到一個 catch 塊來處理它。
  • 使用場景:在遇到錯誤或異常情況時使用,需要停止執行并通知調用者有錯誤發生。
function exampleThrow() {console.log("Before throw");throw new Error("An error occurred"); // 拋出異常,終止執行console.log("After throw"); // 不會執行
}try {exampleThrow();
} catch (e) {console.log(e.message); // 輸出: "An error occurred"
}

主要區別

  1. 控制流

    • return:僅影響當前函數的執行,終止函數并返回指定值。
    • throw:影響整個調用堆棧,拋出異常并將控制權交給最近的異常處理器。
  2. 使用目的

    • return:用于正常的函數返回。
    • throw:用于異常處理,表示錯誤或異常情況。
  3. 后續代碼執行

    • return:函數中的代碼在 return 之后不會執行,但 return 之后的代碼在調用堆棧上層的代碼會繼續執行。
    • throw:不僅終止當前函數的執行,還會影響調用堆棧的上層代碼,直到找到一個 catch 塊來處理異常。

結合以上區別,當你希望在某個條件下中止函數的執行并向調用者返回一個特定值時,使用 return。當你遇到錯誤或異常情況,需要停止執行并通知調用者有錯誤發生時,使用 throw

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/39546.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/39546.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/39546.shtml

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

相關文章

python3遞歸目錄刪除N天前的文件(帶有日志記錄)

本來想用linux find去處理,為了裝逼,寫了py玩玩,刪除2w個文件總共用了2毫秒。因為這個腳本有記錄刪除時間,你可以看到開始時間和最后刪除的時間。由于只用了2毫秒,把我嚇了一跳以為刪錯文件了!! #!/usr/bin/env python3 # -*- encoding: utf-8 -*-@File : del_N…

補瀏覽器環境

一,導言 // global是node中的關鍵字(全局變量),在node中調用其中的元素時,可以直接引用,不用加global前綴,和瀏覽器中的window類似;在瀏覽器中可能會使用window前綴:win…

校園水質信息化監管系統——水質監管物聯網系統

隨著物聯網技術的發展越來越成熟,它不斷地與人們的日常生活和工作深入融合,推動著社會的進步。其中物聯網系統集成在高校實踐課程中可以應用到許多項目,如環境氣象檢測、花卉種植信息化監管、水質信息化監管、校園設施物聯網信息化改造、停車…

C++編程(八)多態

文章目錄 一、多態(一)概念1. 多態2. 函數重寫3. 虛函數 (二)實現多態的條件1. 繼承關系2. 父類中寫虛函數3. 在子類中重寫父類的虛函數4.父類的指針或引用指向子類的對象5. 使用示例 (三)虛析構函數&#…

springboot項目jar包修改數據庫配置運行時異常

一、背景 我將軟件成功打好jar包了,到部署的時候發現jar包中數據庫配置寫的有問題,不想再重新打包了,打算直接修改配置文件,結果修改配置后,再通過java -jar運行時就報錯了。 二、問題描述 本地項目是springBoot項目…

【計算機圖形學 | 基于MFC三維圖形開發】期末考試知識點匯總(上)

文章目錄 視頻教程第一章 計算機圖形學概述計算機圖形學的定義計算機圖形學的應用計算機圖形學 vs 圖像處理 vs模式識別圖形顯示器的發展及工作原理理解三維渲染管線 第二章 基本圖元的掃描轉換掃描轉換直線的掃描轉換DDA算法Bresenham算法中點畫線算法圓的掃描轉換中點畫圓算法…

Java中的持續集成與持續部署

Java中的持續集成與持續部署 大家好,我是免費搭建查券返利機器人省錢賺傭金就用微賺淘客系統3.0的小編,也是冬天不穿秋褲,天冷也要風度的程序猿!今天我們將深入探討Java中的持續集成(Continuous Integration&#xff…

熟練掌握Docker及linux常用命令排查線上問題。熟悉Git, Maven等項目管理及構建工具,熟悉微服務中基于Jenkins的CI/CD

掌握Docker、Linux命令、項目管理及構建工具,以及CI/CD流程是現代軟件開發和運維的關鍵技能。以下是對這些技能的概述和一些實踐建議: ### Docker - **概述**:Docker是一個開源的容器化平臺,允許開發者打包應用及其依賴到一個可移…

【Godot4.2】Godot中的貝塞爾曲線

概述 通過指定平面上的多個點,然后順次連接,我們可以得到折線段,如果閉合圖形,就可以獲得多邊形。通過向量旋轉我們可以獲得圓等特殊圖形。 但是對于任意曲線,我們無法使用簡單的方式來獲取其頂點,好在計…

mac上使用finder時候,顯示隱藏的文件或者文件夾

默認在finder中是不顯示隱藏的文件和文件夾的,但是想創建.gitignore文件,并向里面寫入內容,即便是打開xcode也是不顯示這幾個隱藏文件的,那有什么辦法呢? 使用快捷鍵: 使用finder打開包含隱藏文件的文件夾…

Linux如何安裝openjdk1.8

文章目錄 Centosyum安裝jdk和JRE配置全局環境變量驗證ubuntu使用APT(適用于Ubuntu 16.04及以上版本)使用PPA(可選,適用于需要特定版本或舊版Ubuntu)Centos yum安裝jdk和JRE yum install java-1.8.0-openjdk-devel.x86_64 安裝后的目錄 配置全局環境變量 vim /etc/pr…

ISP IC/FPGA設計-第一部分-SC130GS攝像頭分析-IIC通信(1)

1.攝像頭模組 SC130GS通過一個引腳(SPI_I2C_MODE)選擇使用IIC或SPI配置接口,通過查看攝像頭模組的原理圖,可知是使用IIC接口; 通過手冊可知IIC設備地址通過一個引腳控制,查看攝像頭模組的原理圖&#xff…

中日區塊鏈“大比拼”!中國螞蟻加大區塊鏈押注資本!日本索尼進軍加密貨幣市場!

科技巨頭在區塊鏈和加密貨幣領域的動作越來越頻繁。近期,中國金融科技巨頭螞蟻集團進一步加大了在區塊鏈業務上的投資,而日本電子科技巨頭索尼集團則正式進軍加密貨幣交易領域。這些舉措反映了兩國對于區塊鏈和加密資產領域的不同態度和布局。 螞蟻集團加…

disql使用

進入bin目錄:cd /opt/dmdbms/bin 啟動disql:./disql,然后輸入用戶名、密碼 sh文件直接使用disql: 臨時添加路徑到PATH環境變量:在當前會話中臨時使用disql命令而無需每次都寫完整路徑,可以在執行腳本之前…

973. 最接近原點的 K 個點-k數組維護+二分查找

973. 最接近原點的 K 個點-k數組維護二分查找 給定一個數組 points ,其中 points[i] [xi, yi] 表示 X-Y 平面上的一個點,并且是一個整數 k ,返回離原點 (0,0) 最近的 k 個點。 這里,平面上兩點之間的距離是 歐幾里德距離&#…

洗衣機水龍頭要買有止逆閥的,多花幾十元能省掉幾萬,值了

問大家一下,你家洗衣機水龍頭用的是什么樣的?      可能有業主會說我家買的是純銅的,質量挺好的。      如果你家選的洗衣機水龍頭僅僅是純銅的,并沒有其他的功能,你還是選做錯了。      因為洗衣機水龍頭…

初學嵌入式是弄linux還是單片機?

在開始前剛好我有一些資料,是我根據網友給的問題精心整理了一份「單片機的資料從專業入門到高級教程」, 點個關注在評論區回復“666”之后私信回復“666”,全部無償共享給大家!!!1、先入門了51先學了89c52…

leetcode每日一練:鏈表OJ題

鏈表經典算法OJ題 1.1 移除鏈表元素 題目要求: 給你一個鏈表的頭節點 head 和一個整數 val ,請你刪除鏈表中所有滿足 Node.val val 的節點,并返回 新的頭節點 。 示例 1: 輸入:head [1,2,6,3,4,5,6], val 6 輸出&a…

學習java第一百一十八天

Component 和 Bean 的區別是什么?Component 注解作用于類,而Bean注解作用于方法。Component通常是通過類路徑掃描來自動偵測以及自動裝配到 Spring 容器中(我們可以使用 ComponentScan 注解定義要掃描的路徑從中找出標識了需要裝配的類自動裝…

Nacos 配置中心:動態加載 Bean

前提: 已經集成好 springboot / cloud 與nacos的環境 1 nacos中配置文件參數 message:#sender: emailMessageSendersender: smsMessageSender 2 接口和兩個實現類 public interface MessageSender {String sendMessage(String message, String recipient); }impo…