近期在看到jQuery中test(index,test)的用法涉及到回調函數,以前未有涉及,於今晚專門看看了看,將我的對於回調函數的理解感悟記錄一下,有不正確的地方但願指出。異步
回調函數(callback),英文中的解釋其實更容易理解:A callback is a function that is passed as an argument to another function and is executed after its parent function has completed.下面我以拙劣的英文翻譯下,回調函數是指函數b被當作函數a的參數使用,且當函數a執行完畢後纔會執行函數a。async
這裏說個題外話,異步async/同步sync函數
舉個栗子:spa
1.異步:早上起來拉屎,擦屁股,這個確定是要拉完屎才能擦屁股,不能一邊拉屎一邊擦屁股,這樣擦屁股就沒有任何意義,這就是異步。翻譯
2.同步:早上起牀,你能夠坐在馬桶上一邊拉屎一邊摳鼻屎,兩者沒有任何影響,可同時進行,上下通透,這就是 同步。3d
來段異步代碼示例:code
以上代碼會先執行函數a,並且不會等到a中的延遲函數執行完才執行函數b, 在延遲函數被觸發的過程當中就執行了函數b,當js引擎的event 隊列空閒時纔會去執行隊列裏等待的setTimeout的回調函數,這就是一個異步的例子。blog
因此即便,時間設置爲0,也是會照樣先執行函數b隊列
來段同步代碼示例回調函數
結果輸出1
print函數會等change函數完成以後去執行,因此結構輸出爲1,由於change函數修改了全局變量a的值,change執行以後才執行的print函數。
回到回調函數的正題。下面再舉個從其餘博主那裏看到的栗子(果真別人家的栗子好吃):
舉個現實的例子:約會結束後你送你女友回家,離別時,你確定會說:「到家了給我發條信息,我很擔憂你。」對不,而後你女友回家之後還真給你發了條信息。小夥子,你有戲了。
其實這就是一個回調的過程。你留了個函數b(要求女友給你發條信息)給你女友,而後你女友回家,回家的動做是函數a。她必須先回到家之後,函數a的內容執行完了,再執行函數b,而後你就收到一條信息了。
這裏必須清楚一點:函數b是你以參數形式傳給函數a的,那麼函數b就叫回調函數。
相信到這裏你們已經對callback有必定的認識了,下面上代碼:
function shit(clean_ass) { alert("我是函數shit"); alert("shit完我會調用clean_ass來清理個人菊花"); clean_ass(); } function clean_ass(){ alert("我要清理個人菊花了"); } function all_action(){ shit(clean_ass); }
這樣你就完成了拉屎的動做(先拉屎,後清理菊花),若有疏漏之處,煩請指出。