日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

javascript之回调函数小知识

發(fā)布時間:2025/4/16 javascript 48 豆豆
生活随笔 收集整理的這篇文章主要介紹了 javascript之回调函数小知识 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Javascript異步編程方法------“回調(diào)函數(shù)”

這是異步編程最基本的方法。

軟件模塊之間總是存在著一定的接口,從調(diào)用方式上,可以把他們分為三類:同步調(diào)用、回調(diào)和異步調(diào)用。同步調(diào)用是一種阻塞式調(diào)用,調(diào)用方要等待對方執(zhí)行完畢才返回,它是一種單向調(diào)用;回調(diào)是一種雙向調(diào)用模式,也就是說,被調(diào)用方在接口被調(diào)用時也會調(diào)用對方的接口;異步調(diào)用是一種類似消息或事件的機(jī)制,不過它的調(diào)用方向剛好相反,接口的服務(wù)在收到某種訊息或發(fā)生某種事件時,會主動通知客戶方(即調(diào)用客戶方的接口)。回調(diào)和異步調(diào)用的關(guān)系非常緊密,通常我們使用回調(diào)來實現(xiàn)異步消息的注冊,通過異步調(diào)用來實現(xiàn)消息的通知。同步調(diào)用是三者當(dāng)中最簡單的,而回調(diào)又常常是異步調(diào)用的基礎(chǔ)

首先說一下什么是個回調(diào)函數(shù)?

? ? ? 在計算機(jī)程序設(shè)計中,回調(diào)函數(shù),或簡稱回調(diào),是指通過函數(shù)參數(shù)傳遞到其它代碼的,某一塊可執(zhí)行代碼的引用。這一設(shè)計允許了底層代碼調(diào)用在高層定義的子程序。一般用于截獲消息、獲取系統(tǒng)信息或處理異步事件。

?

回調(diào)函數(shù)實現(xiàn)的機(jī)制是

?

⑴定義一個回調(diào)函數(shù);

⑵提供函數(shù)實現(xiàn)的一方在初始化的時候,將回調(diào)函數(shù)的函數(shù)指針注冊給調(diào)用者;

⑶當(dāng)特定的事件或條件發(fā)生的時候,調(diào)用者使用函數(shù)指針調(diào)用回調(diào)函數(shù)對事件進(jìn)行處理。

簡單的說我們們可以像使用變量一樣使用函數(shù),作為另一個函數(shù)的參數(shù),在另一個函數(shù)中作為返回結(jié)果,在另一個函數(shù)中調(diào)用它。當(dāng)我們作為參數(shù)傳遞一個回調(diào)函數(shù)給另一個函數(shù)時,我們只傳遞了這個函數(shù)的定義,并沒有在參數(shù)中執(zhí)行它。

當(dāng)包含(調(diào)用)函數(shù)擁有了在參數(shù)中定義的回調(diào)函數(shù)后,它可以在任何時候調(diào)用(也就是回調(diào))它。

?

回調(diào)函數(shù)是閉包的
當(dāng)作為參數(shù)傳遞一個回調(diào)函數(shù)給另一個函數(shù)時,回調(diào)函數(shù)將在包含函數(shù)函數(shù)體內(nèi)的某個位置被執(zhí)行,就像回調(diào)函數(shù)在包含函數(shù)的函數(shù)體內(nèi)定義一樣。這意味著回調(diào)函數(shù)是閉包的,之后也會介紹關(guān)于閉包的一些知識。眾所周知,閉包函數(shù)可以訪問包含函數(shù)的作用域,所以,回調(diào)函數(shù)可以訪問包含函數(shù)的變量,甚至是全局變量。

?

假定有兩個函數(shù)f1和f2,后者等待前者的執(zhí)行結(jié)果。

f1();

f2();

如果f1是一個很耗時的任務(wù),可以考慮改寫f1,把f2寫成f1的回調(diào)函數(shù)。

function f1(callback){setTimeout(function () {// f1的任務(wù)代碼callback();

}, 1000);

}

執(zhí)行代碼就變成下面這樣:

f1(f2);

采用這種方式,我們把同步操作變成了異步操作,f1不會堵塞程序運行,相當(dāng)于先執(zhí)行程序的主要邏輯,將耗時的操作推遲執(zhí)行。

回調(diào)函數(shù)的優(yōu)點是簡單、容易理解和部署,缺點是不利于代碼的閱讀和維護(hù),各個部分之間高度耦合( Coupling ),流程會很混亂,而且每個任務(wù)只能指定一個回調(diào)函數(shù)。

?

有以下需求時你可以考慮使用回調(diào):

?

  • 避免重復(fù)代碼?(DRY—Do Not Repeat Yourself)
  • 在你需要更多的通用功能的地方更好地實現(xiàn)抽象(可處理各種類型的函數(shù))。
  • 增強(qiáng)代碼的可維護(hù)性
  • 增強(qiáng)代碼的可讀性

我們在JavaScript中經(jīng)常使用回調(diào)函數(shù)時注意以下幾點,尤其是現(xiàn)在的web應(yīng)用開發(fā),在第三方庫和框架中

  • 異步執(zhí)行(例如讀文件,發(fā)送HTTP請求)
  • 事件監(jiān)聽和處理
  • 設(shè)置超時和時間間隔的方法
  • 通用化:代碼簡潔?
  • 有更多定制的功能

在這里我說的比較片面,有不足之處請諒解,同時也希望讀者可以多多的提意見,以便改進(jìn)

?

轉(zhuǎn)載于:https://www.cnblogs.com/jtr122624520/p/5909088.html

總結(jié)

以上是生活随笔為你收集整理的javascript之回调函数小知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。