初次接觸JS回調函數的感悟

近期在看到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); }

 

 

這樣你就完成了拉屎的動做(先拉屎,後清理菊花),若有疏漏之處,煩請指出。

相關文章
相關標籤/搜索