js_callback回調函數

問題背景:callback回調函數算是js裏的一個大頭,我之前是模仿式寫代碼,並沒有領會到callback的本質。後來遇到了個同步異步的問題,一定要弄懂callback才行,就硬着頭皮總算搞懂啦~
既然代碼搞定了,下面就回過頭來整理一下(笑)


網上的講解各式各樣,其中我覺得講的最好的是知乎上的一個例子:
鏈接:https://www.zhihu.com/question/19801131/answer/17312995

你去食堂打飯,你去了一個小炒窗口。
你跟老闆說了要×××蓋飯。
老闆說:你是100號,喊到你的號你就來拿菜。
然後你在旁邊跟同學吹牛、玩手機。。。
當你聽到老闆喊100號並且把菜放到窗口。
你走到窗口,拿到你的菜。

這裏面就有典型的異步操作、回調函數的概念。
好吧,先搞清楚一些問題再回頭分析

1.回調函數在什麼場景有用?
我要在特定時候執行一個任務,至於是什麼時候我自己都不知道。比如某一時間到了或者某一事件發生或者某一中斷觸發。
舉個栗子:剛纔的打飯故事中,我並不知道老闆什麼時候會叫我拿飯,那麼在等待這段時間,我就乾等着嗎?當然也可以,但是會不會太無聊了些???對應到前端頁面中,比如,讓用戶一直等待一個圖片加載出來,加載過程中,用戶啥也不能幹,用戶會罵人的吧(笑)

2.回調函數怎麼起作用?
把我要執行的這個任務寫成一個函數,將這個函數和某一時間或者事件或者中斷建立關聯。怎麼個建立關聯法?在事件中調用這個函數嘛。
這裏寫圖片描述
比如這個圖上,gainJSON是一個函數,它有兩個參數,一個是url,是個變量;一個是callback,是個函數。那有人要問了函數也能作爲另一個函數的參數嗎?不好意思,JS中可以!接着,可以看到,在gainJSON這個函數裏,調用了callback函數。

3.回調函數什麼時候執行?
當該回調函數關心的那個時間或者事件或者中斷觸發的時候,回調函數將被執行。一般是觸發這個時間、事件或中斷的程序主體(通常是個函數或者對象)觀察到有一個關注這個東東的回調函數的時候,這個主體負責調用這個回調函數。

4.回調函數有什麼好處?
最大的好處是你的程序變成異步了。也就是你不必再調用這個函數的時候一直等待這個時間的到達、事件的發生或中斷的發生(萬一一直不發生,你的程序會怎麼樣?)。在此期間你可以做做別的事情,或者四處逛逛。當回調函數被執行時,你的程序重新得到執行的機會,此時你可以繼續做必要的事情了。

5.回調函數有什麼問題嗎?
當然就會有點問題。回調函數很多情況下會附帶有跨線程操作甚至於跨進程的操作,這些都是異步帶來的成本。(關於這個,我下一篇博客會講講)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章