JavaScript中的回調函數詳解

JavaScript中的回調函數詳解

1.1 概念

1.1.1 什么是回調函數

**回調函數(Callback Function)**是你將一個函數的引用(指針)作為參數傳遞給另一個函數,在那個函數完成任務后調用回來執行你傳遞的函數。簡單的來說就是回調函數是作為參數傳遞給另一個函數,目的是讓接受它的函數在特定條件滿足、異步操作完成或事件發生的時候回調它

1.1.2 關鍵特征

  1. 傳而不調用的機制
    • 你把函數A作為參數傳遞給B
    • 函數B暫時不調用A,而是保存它的引用
    • 當指定情況發生的時候,(事件觸發/異步操作完成后),函數B才會調用它
// 經典回調結構
主函數(回調函數); // 傳遞時不執行function 主函數(cb) {// ...處理某些操作...cb(); // 滿足條件時才回調(調用)
}
  • 回:讓代碼執行流程回到調用者
  • 調:由被調用方決定何時執行
  • 函數:傳遞的是一段可執行的代碼邏輯

1.1.2 現實世界的比喻

想想你去飯館點餐:

  1. 你點了一份需要時間才能做好的飯菜(啟動異步任務)
  2. 服務員給你一個取餐號(獲得回調標識)
  3. 你去座位上喝茶(繼續執行主線程代碼)
  4. 廚師完成菜肴(后臺處理完成)
  5. 服務員喊你的號碼:123取餐(觸發回調)
  6. 你憑借著號碼牌取餐(執行回調函數處理結果)

整個過程的關鍵:你不需要等待,系統會在合適的時間通知你

1.2 代碼中的三種回調函數形式

2.1 同步回調

// 定義接收回調的函數
function processArray(arr, callback) {const result = [];for (const item of arr) {result.push(callback(item)); // 立即調用!}return result;
}// 使用
const doubled = processArray([1, 2, 3], x => x * 2);
console.log(doubled); // [2, 4, 6]

image-20250628140436137

2.2 異步回調(延遲回呼)

   //2.異步回調// 模擬異步任務function fetchData(url,callback){setTimeout(()=>{const data = `${url}獲取的數據`;callback(data)},5000*4);}//使用 fetchData('api/users',data=>{console.log('收到的數據',data)})console.log("請求已發送,繼續執行其他任務...")

img

2.3 事件回調

<Button id = "myButton">點擊我</Button>

document.getElementById('myButton').addEventListener('click',()=>{console.log('按鈕被點擊了!')//當按鈕被點擊時執行
})

img

2.3.1 什么是事件回調

回調函數是指:將一個函數作為參數傳遞給另一個函數,并在特定事件發生或者條件滿足時才被調用的函數

在事件處理中:

  1. 事件發生:用戶執行了某些操作(比如點擊按鈕)
  2. 系統調用-瀏覽器自動出發之前“注冊”的回調函數
  3. 執行操作-回調函數中的代碼被執行

2.3.2 代碼中的回調關系

//結構解析
元素.addEventListener('事件類型',回調函數)//具體實例:
document.getElementById('myButton').addEventListener(
'click'  //事件類型
() =>{
console.log('按鈕被點擊了!')  //回調函數
}
)

為什么是“回調”的三個關鍵點

  1. 函數作為參數傳
    • ()=》{console.log(…)}這個匿名函數作為參數傳遞給了addEventListener()方法
  2. 延遲執行
    • 這個函數不會立即執行
    • 它會一直等待,直到特定事件(這里是點擊事件)發生的時候才會被調用
  3. 反向調用
    • 你不是主動調用它
    • 而是由瀏覽器在事件觸發時“反回來調用”你注冊的函數
類比生活中的回調:

想象你寄快遞:

  1. 你把包裹(回調函數)交給快遞員(addEventListener
  2. 你告訴快遞員:“當收件人簽收時(事件發生),請通知我(執行操作)”
  3. 之后你就去做其他事(代碼繼續執行)
  4. 當收件人真正簽收時(用戶點擊按鈕),快遞員打電話給你(執行回調函數)

2.3.3 回調的核心特點:

特點說明代碼體現
注冊機制需要提前設置好響應事件的函數addEventListener
異步性事件何時發生不確定代碼注冊后不立即執行
事件驅動由外部事件觸發執行等待用戶點擊操作
反轉控制權由系統調用你的代碼瀏覽器控制函數調用時機

在JavaScript中,事件處理基本都是采用這種回調機制,這被稱為事件驅動編程(Event-Driven Programming),是Web開發的核心模式之一。

所以叫它"事件回調",是因為你把一個函數("叫"它做什么)交給了事件系統,事件系統在特定事件發生后"回過來調用"你給它的函數。

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

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

相關文章

Utils系列之內存池(Fixed size)

內存池核心介紹 廢話不多說&#xff0c;show you code. 我實現了兩套內存池&#xff0c;一個是固定大小的內存池&#xff0c;一個是多重不同大小的內存池。 Fixed size memory pool 設計思路&#xff1a; 我們一個個看&#xff0c;首先我們定義了一個chunk, chunk 里面包含…

ubuntu安裝docker遇到權限問題

問題現象&#xff1a; 使用snap安裝的docker&#xff0c;執行docker build命令構建景象時報錯&#xff1a; [] Building 0.1s (1/1) FINISHED docker:default > [internal] load build definition from Dockerfile 0.0s > > transferring dockerfile: 2B 0.0s ERROR:…

在Linux系統中部署Java項目

1.在Linux中啟動mysql的服務: systemctl start mysql可以采用以下代碼查看狀態: systemctl status mysql如下圖展示綠色代表啟動成功 2.之后進入mysql mysql -uroot -p輸入自己的密碼&#xff0c;這里的密碼不會顯示,直接輸入即可 3.在DG中連接Linux的數據庫 4.修改配置文件…

C++洛谷P1002 過河卒

題目 鏈接&#xff1a;https://www.luogu.com.cn/problem/P1002 解析 這道題適用于了解動態規劃的同學。 變量初始化 初始化B點坐標&#xff08;n, m&#xff09;和馬的坐標&#xff08;a, b&#xff09; 初始化方向數組和動態規劃數組 long long dp[30][30]; int dx[8] …

BlogX項目Go-gin--根據IP獲取地理位置

先定義一個函數來判斷IP地址是否為內網&#xff0c;歸為工具類 // utils/ip/enter.go package ipimport "net"func HasLocalIPAddr(ip string) bool {return HasLocalIP(net.ParseIP(ip)) }// HasLocalIP 檢測 IP 地址是否是內網地址 // 通過直接對比ip段范圍效率更…

鴻蒙系統(HarmonyOS)應用開發之實現瀑布流圖片展示效果

項目概述 科技圖庫是一款基于鴻蒙系統&#xff08;HarmonyOS&#xff09;開發的高品質圖片瀏覽應用&#xff0c;專注于展示精選科技主題圖片。應用采用現代化的瀑布流布局&#xff0c;為用戶提供流暢、直觀的瀏覽體驗&#xff0c;讓科技之美盡收眼底。 主要功能 1. 瀑布流布…

【fish-speech】新模型openaudio-s1-mini嘗鮮

一、配置 顯卡&#xff1a;v100&#xff08;測試簡短語句&#xff0c;顯存實際占用不足6G&#xff09; 二、安裝測試 1. 安裝 1.1 下載源碼 git clone https://github.com/fishaudio/fish-speech.git1.2 安裝系統組件 apt install portaudio19-dev libsox-dev ffmpeg1.3 …

介紹Windows下的由Sysinternals開發的一些小工具

Sysinternals是一個開發了很多Windows下系統工具的公司&#xff0c;這些工具能極大地提高對Windows系統的深入認知。就像它的名字Sys(tem)internals&#xff0c;深入系統里面。這些工具都放在微軟的網站上可以下載到。https://learn.microsoft.com/en-us/sysinternals/ 下載網…

云服務器環境下Linux系統epoll機制與高并發服務器優化實踐

在當今云計算時代&#xff0c;云已成為企業部署高并發服務的首選平臺。本文將深入探討Linux系統核心的epoll機制如何賦能云環境下的高并發服務器&#xff0c;解析其底層工作原理與性能優勢&#xff0c;并對比傳統IO復用模型的差異&#xff0c;幫助開發者構建更高效的云端服務架…

Java爬蟲實戰指南:按關鍵字搜索京東商品

在電商領域&#xff0c;快速獲取商品信息對于市場分析、選品上架、庫存管理和價格策略制定等方面至關重要。京東作為國內領先的電商平臺之一&#xff0c;提供了豐富的商品數據。雖然京東開放平臺提供了官方API來獲取商品信息&#xff0c;但有時使用爬蟲技術來抓取數據也是一種有…

aspose.word在IIS后端DLL中高并發運行,線程安全隔離

aspose.word在IIS后端DLL中運行,加載很慢,如何為全部用戶加載,再每個用戶訪問時在各自線程中直接可以打開WORD文件處理 Aspose.Words 在 IIS 中優化加載性能方案 針對 Aspose.Words 在 IIS 后端 DLL 中加載緩慢的問題&#xff0c;我們可以通過單例模式預加載組件并結合線程安…

鏈表題解——回文鏈表【LeetCode】

一、算法邏輯&#xff08;通順講解每一步思路&#xff09; 我們從 isPalindrome 這個主函數入手&#xff1a; 步驟 1&#xff1a;找到鏈表的中間節點 middleNode 使用 快慢指針法&#xff08;slow 和 fast&#xff09; 快指針一次走兩步&#xff0c;慢指針一次走一步。 當快…

allegro 銅皮的直角邊怎么快速變成多邊形?

像這種&#xff1a; 變成這種&#xff1a; 解決方案&#xff1a; shape edit boundary 點擊鋪銅邊緣就能裁剪

從廚房到代碼臺:用做菜思維理解iOS開發 - Swift入門篇②

從廚房到代碼臺&#xff1a;用做菜思維理解iOS開發 - Swift入門篇② 本章重點? 理解App開發的整體流程熟悉Xcode主界面結構與常用分區跟著步驟動手創建第一個App項目&#xff0c;認識模擬器掌握"打掃廚房"高頻快捷鍵&#xff0c;解決常見疑難雜癥 1、目標 像一個專…

EloqCloud for KV 初體驗:兼容redis的云原生KV數據庫

最近在做一些AI應用的時候&#xff0c;我在想嘗試利用redis的能力緩存一些信息&#xff0c;這使我想去找一個免費的redis來進行使用&#xff0c;在調研的過程中我發現了一款產品EloqCloud for KV可以提供類似的能力&#xff0c;于是嘗試使用了一下&#xff0c;本文記錄了這次體…

企業級路由器技術全解析:從基礎原理到實戰開發

簡介 在當今數字化時代,路由器作為網絡的核心設備,其技術深度與應用廣度直接影響著企業網絡的性能與安全性。本文將全面解析路由器的基礎原理、工作機制以及企業級開發技術,從網絡層尋址到路由協議算法,從安全配置到QoS實現,再到多廠商API開發實戰,旨在幫助網絡工程師和…

day041-web集群架構搭建

文章目錄 0. 老男孩思想-高薪四板斧1. web集群架構圖2. 搭建異地備份服務2.1 服務端-阿里云服務器2.1.1 查看rsync軟件包2.1.2 添加rsync配置文件2.1.3 添加虛擬用戶2.1.4 創建校驗用戶密碼文件2.1.5 創建備份目錄2.1.6 啟動服務2.1.7 開放安全組端口2.1.8 發送檢查郵件 2.2 客…

day44-Django RestFramework(drf)下

1.5 Django RestFramework(下) drf 內置了很多便捷的功能,在接下來的課程中會給大家依次講解下面的內容: 快速上手請求的封裝版本管理認證權限限流序列化視圖條件搜索分頁路由解析器10. 分頁 在查看數據列表的API中,如果 數據量 比較大,肯定不能把所有的數據都展示給用…

機器學習基礎 線性回歸與 Softmax 回歸

機器學習基礎 線性回歸與 Softmax 回歸 文章目錄 機器學習基礎 線性回歸與 Softmax 回歸1. 最小二乘法1.1 數據集定義1.2 最小二乘的矩陣推導1.3 最小二乘的幾何解釋1.4 概率視角下的最小二乘估計 2. 正則化2.1 L1 范數與 L2 范數2.2 正則化的作用2.3 Lasso 回歸的求解2.3.1 L-…

6.27_JAVA_面試(被抽到了)

1.MYSQL支持的存儲引擎有哪些, 有什么區別 ? In-no-DB&#xff08;默認&#xff09;&#xff1a;支持事務安全&#xff08;數據庫運行時&#xff0c;能保證數據的一致性、完整性&#xff09;&#xff0c;支持表行鎖&#xff0c;支持物理和邏輯外鍵。占用磁盤空間大。 MEMORY&…