淺談回調函數
阿新 • • 發佈:2018-01-12
通過 代碼 什麽 wikipedia page 這不 ack lang red
最近學習js的異步執行,用到回調函數,對這個機制不是很理解,故查了一些資料,在此整理分享一下自己的理解。
維基百科對回調函數的定義:
在計算機程序設計中,回調函數,或簡稱回調(Callback 即call then back 被主函數調用運算後會返回主函數),是指通過函數參數傳遞到其它代碼的,某一塊可執行代碼的引用。這一設計允許了底層代碼調用在高層定義的子程序。
知乎上一個網友提供的生動描述:
你到一個商店買東西,剛好你要的東西沒有貨,於是你在店員那裏留下了你的電話,過了幾天店裏有貨了,店員就打了你的電話,然後你接到電話後就到店裏去取了貨。在這個例子裏,你的電話號碼就叫回調函數,你把電話留給店員就叫登記回調函數,店裏後來有貨了叫做觸發了回調關聯的事件,店員給你打電話叫做調用回調函數,你到店裏去取貨叫做響應回調事件。 自己的理解:按維基百科的說明理解起來是將回調函數(代碼塊),作為參數傳遞給調用函數,由調用函數執行回調函數的代碼邏輯。這和函數的調用似乎沒有多大區別。但感覺這不像是回調函數,原因是沒有突出‘回調’二字。在js中結合回調函數應用的上下文概念,回調函數作為參數似乎只是傳遞了一個函數指針(函數名)給調用函數,調用函數會觸發回調函數到定義其的上下文中去執行。就像飯點到了,你自己沒備蔬菜,鄰居叫你過去,前一種理解似乎是這樣,你等著,他家做好飯你一起吃。後一種是他做好了你打包了一份,帶回家吃。自己傾向於後一種理解,原因是調用的函數不需要知道回調函數要做什麽,只要知道他的名字,通知他做就好了。 理解的還不是很透徹,希望大家多多指教。淺談回調函數