對普通函數的呼叫:呼叫程式發出對普通函數的呼叫後,程式執行立即轉向被呼叫函數執行,直到被呼叫函數執行完畢後,再返回呼叫程式繼續執行。從發出呼叫的程式的角度看,這個過程為「呼叫-->等待被呼叫函數執行完畢-->繼續執行」
對回呼函數呼叫:呼叫程式發出對回調函數的調用後,不等函數執行完畢,立即返回並繼續執行。這樣,呼叫程序執和被呼叫函數同時在執行。當被調函數執行完畢後,被調函數會反過來呼叫某個事先指定函數,以通知呼叫程式:函數呼叫結束。這個過程稱為回呼(Callback),這正是回呼函數名稱的由來。
普通函數,回呼函數都是被其他函數呼叫的,不同之處在於呼叫者是否明確知道自己呼叫的到底是什麼,舉個例子:
void func1(){}
void func2(){}
typedef void (*fp)();//申明函數指標,fp表示一個空參數,傳回型別void的函式指標
void funcCaller1() {
//此處func1可以看成普通函數
func1();//此處,funcCall1明確知道自己呼叫了func1
}
void funcCaller2(fp funcPtr){
funcPtr();//此處,funcCall2並不知道自己到底調用的是什麼,只知道自己呼叫了一個空參數的,返回類型是void的函數
}
void funcCaller3(){
//此處,funcCaller2是普通函數,func1是回呼函數
funcCaller2(func1);//呼叫funcCaller2,參數是func1
//此處,funcCaller2是普通函數,func2是回呼函數
funcCaller2(func2);//呼叫funcCaller2,參數是func2
}
以上是回呼函數和普通函數有什麼差別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!