異步模式Asynchronous
不會等待這個任務結束才開始執行下一個任務,開啟之后立即執行下一個任務,后續邏輯一般會通過回呼函式的方式定義,異步模式對js 非常重要,沒有異步任務單執行緒的 js 語言就無法同時處理大量耗時任務,單執行緒下面的異步最大的難點就是 代碼的執行順序混亂,Queue是訊息佇列佇列也叫回呼佇列

列印訊息給同步一樣執行壓堆疊彈堆疊,接下來就是倒計時器,setTimeOut 就是呼叫了web api,web api單獨運行不會阻塞js的執行, 開啟倒計時器之后 setTimeOut的呼叫就已經結束,會繼續往下呼叫,同理壓堆疊開啟倒計時器彈堆疊,最后列印訊息之后對于這個匿名函式就已經呼叫完了,這個時候我們的呼叫堆疊就會被清空掉,當呼叫堆疊執行完之后,Evevt loop就會從訊息佇列中取出第一個回呼函式壓入到呼叫堆疊,當倒計時器達到時間之后就會把回呼函式放入到回呼佇列中,timer2倒計時先結束所以會先放入訊息佇列中的第一位, Evevt loop監聽到訊息佇列發生變化,就會把timer2 放入到執行堆疊中去執行,這個時候對于呼叫堆疊來說就是開啟了新一輪的執行,如果執行堆疊中的函式又開啟了定時器,這個時候給前面的步驟是一樣的,不斷的去加入訊息佇列,不斷的去提取訊息佇列中的函式來執行,直到呼叫堆疊和訊息佇列中都沒有需要執行的函式整體的代碼就結束了,javascript執行引擎就是先去執行呼叫堆疊中的任務,然后再通過事件回圈從訊息佇列中再取一個任務執行,依次類推,我們隨時都可以往訊息佇列放入任務,這些任務會排隊執行,javascript異步實作原理內部就是通過訊息佇列和時間回圈實作的
回呼函式
所有異步編程方案根基都是回呼函式,由呼叫者定義,交給執行者去執行的函式叫做回呼函式
function foo (callback) {
setTimeOut(() => {
callback()
}, 3000)
}
foo(() => {
console.log("恰飯飯")
})
原文地址: https://kspf.xyz/archives/19
更多內容微信公眾號搜索充饑的泡飯
小程式搜一搜開水泡飯的博客
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/520682.html
標籤:JavaScript
下一篇:yarn和npm的區別
