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

全國咨詢/投訴熱線:400-618-4000

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

更新時間:2022年05月09日11時31分 來源:傳智教育 瀏覽次數(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)用是一種類似消息或事件的機制,不過它的 調(diào)用方向剛好相反,接口的服務在收到某種訊息或發(fā)生某種事件時,會主動通知客戶方(即調(diào)用客戶方的接口)?;卣{(diào)和異步調(diào)用的關系非常緊密,通常我們使用回 調(diào)來實現(xiàn)異步消息的注冊,通過異步調(diào)用來實現(xiàn)消息的通知。同步調(diào)用是三者當中最簡單的,而回調(diào)又常常是異步調(diào)用的基礎,因此,下面我們著重討論回調(diào)機制在 不同軟件架構(gòu)中的實現(xiàn)

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

  案例:

#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ù)的指針類型
//@height      回調(diào)參數(shù),當有多個參數(shù)時,可以定義一個結(jié)構(gòu)體
//@contex      回調(diào)上下文,在C中一般傳入nullptr,在C++中可傳入對象指針
typedef void (*CallbackFun)(double height, void *contex);
//定義全局指針變量
CallbackFun m_pCallback;
//定義注冊回調(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()
{
    //注冊回調(diào)函數(shù)onHeight
    registHeightCallback(onHeight, NULL);
    //打印height
    double h = 99;
    printHeightFun(99);
}




猜你喜歡:

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

JavaScrit splice()方法如何使用?

前端與移動開發(fā):js對閉包的深入理解

JavaScript數(shù)組類型檢測的方法

傳智教育前端與移動開發(fā)培訓課程

0 分享到:
和我們在線交談!