回呼地獄:

網上很多關于回呼地獄的圖片,聽起來很深奧,其實簡單來說就是回呼函式的嵌套,那么,什么是回呼函式呢?
回呼函式:
把一個函式當作引數傳遞,傳遞的是函式的定義并不會立即執行,而是在將來特定的時機再去呼叫,這個函式就叫做回呼函式,
注意:回呼函式不會阻塞主執行緒代碼的執行,比如下圖控制臺列印:

為什么要用到回呼函式:
在定時器setTimeout以及Ajax的請求時都會用到回呼函式,
1.特定場景需求下,我們用定時器控制一個函式在指定時間后才會觸發;
2.在發送Ajax中,客戶端和服務器之間的請求和回應都是需要時間的,而我們要拿回應回來的資料就必須等回應完成,這些都是回呼函式的常用場景,
為什么要用到回呼函式的嵌套:

如圖所示,我們想按照書寫順序分別讀取三個檔案的內容,雖然順序是a.txt ···> b.txt ··· > ···c.txt,但是結果卻不是預期中的那樣顯示,這是因為讀取檔案都是異步函式,互不影響,
就跟百米沖刺一樣,誰先到終點都是不確定的,為了達到檔案讀取順序為:a、b、c,我們就必須讓百米賽跑變成接力賽,拿到上個同學的接力棒,下個同學才能上賽場,
代碼演示如下:

經過測驗,每次列印結果都是 a、b、c檔案的內容,然后如圖所示,回呼函式一層套一層,就逐步形成了“回呼地獄”,回呼地獄雖然將異步函式的執行順序變為同步,
但是這樣的代碼閱讀性非常不好,可維護性也很差,
下篇我會詳細介紹如何解決回呼函式的嵌套,歡迎感興趣的小伙伴閱讀,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/229206.html
標籤:其他
