教育行業(yè)A股IPO第一股(股票代碼 003032)

全國(guó)咨詢/投訴熱線:400-618-4000

什么是回調(diào)函數(shù)?【W(wǎng)eb前端面試題】

更新時(shí)間:2022年05月09日11時(shí)31分 來(lái)源:傳智教育 瀏覽次數(shù):

  軟件模塊之間總是存在著一定的接口,從調(diào)用方式上,可以把他們分為三類(lèi):同步調(diào)用、回調(diào)和異步調(diào)用

  同步調(diào)用是一種阻塞式調(diào)用,調(diào)用方要等待對(duì)方執(zhí)行完畢才 返回,它是一種單向調(diào)用;回調(diào)是一種雙向調(diào)用模式,也就是說(shuō),被調(diào)用方在接口被調(diào)用時(shí)也會(huì)調(diào)用對(duì)方的接口;

  異步調(diào)用是一種類(lèi)似消息或事件的機(jī)制,不過(guò)它的 調(diào)用方向剛好相反,接口的服務(wù)在收到某種訊息或發(fā)生某種事件時(shí),會(huì)主動(dòng)通知客戶方(即調(diào)用客戶方的接口)?;卣{(diào)和異步調(diào)用的關(guān)系非常緊密,通常我們使用回 調(diào)來(lái)實(shí)現(xiàn)異步消息的注冊(cè),通過(guò)異步調(diào)用來(lái)實(shí)現(xiàn)消息的通知。同步調(diào)用是三者當(dāng)中最簡(jiǎn)單的,而回調(diào)又常常是異步調(diào)用的基礎(chǔ),因此,下面我們著重討論回調(diào)機(jī)制在 不同軟件架構(gòu)中的實(shí)現(xiàn)

  回調(diào)函數(shù)就是一個(gè)通過(guò)函數(shù)指針調(diào)用的函數(shù)。如果你把函數(shù)的指針(地址)作為參數(shù)傳遞給另一個(gè)函數(shù),當(dāng)這個(gè)指針被用來(lái)調(diào)用其所指向的函數(shù)時(shí),我們就說(shuō)這是回調(diào)函數(shù)?;卣{(diào)函數(shù)不是由該函數(shù)的實(shí)現(xiàn)方直接調(diào)用,而是在特定的事件或條件發(fā)生時(shí)由另外的一方調(diào)用的,用于對(duì)該事件或條件進(jìn)行響應(yīng)。

  案例:

#include<stdio.h>
//callbackTest.c
//1.定義函數(shù)onHeight(回調(diào)函數(shù))
//@onHeight 函數(shù)名
//@height   參數(shù)
//@contex   上下文
void onHeight(double height, void *contex)
{
    printf("current height is %lf", height);
}
//2.定義onHeight函數(shù)的原型
//@CallbackFun 指向函數(shù)的指針類(lèi)型
//@height      回調(diào)參數(shù),當(dāng)有多個(gè)參數(shù)時(shí),可以定義一個(gè)結(jié)構(gòu)體
//@contex      回調(diào)上下文,在C中一般傳入nullptr,在C++中可傳入對(duì)象指針
typedef void (*CallbackFun)(double height, void *contex);
//定義全局指針變量
CallbackFun m_pCallback;
//定義注冊(cè)回調(diào)函數(shù)
void registHeightCallback(CallbackFun callback, void *contex)
{
    m_pCallback = callback;
}
//定義調(diào)用函數(shù)
void printHeightFun(double height)
{
    m_pCallback(height, NULL);
}
//main函數(shù)
int main()
{
    //注冊(cè)回調(diào)函數(shù)onHeight
    registHeightCallback(onHeight, NULL);
    //打印height
    double h = 99;
    printHeightFun(99);
}




猜你喜歡:

什么是閉包,如何使用閉包?

JavaScrit splice()方法如何使用?

前端與移動(dòng)開(kāi)發(fā):js對(duì)閉包的深入理解

JavaScript數(shù)組類(lèi)型檢測(cè)的方法

傳智教育前端與移動(dòng)開(kāi)發(fā)培訓(xùn)課程

0 分享到:
和我們?cè)诰€交談!