1. 程式人生 > >Evevt Loop 事件迴圈

Evevt Loop 事件迴圈

今天在看es6的promise的時候,看了一個很有意思的面試題,牽扯到了setTimeout的執行順序,總結一下
貼一下面試題的連結 Excuse me?這個前端面試在搞事! - Liril的文章 - 知乎https://zhuanlan.zhihu.com/p/25407758
事件迴圈
同步和非同步任務分別進入不同的執行"場所",同步的進入主執行緒,非同步的進入Event Table並註冊函式。
當指定的事情完成時,Event Table會將這個函式移入Event Queue。
主執行緒內的任務執行完畢為空,會去Event Queue讀取對應的函式,進入主執行緒執行。
上述過程會不斷重複,也就是常說的Event Loop(事件迴圈)。
setTimeout


如果以0毫秒的超時時間來呼叫setTimeout(),那麼指定的函式不會立即執行,相反會把它放到佇列中去,等到前面處於等待狀態的事件處理程式全部執行完成後,再“立即”呼叫它。(setTimeout和setInterval經常有不守時的時候)。
setTimeout並不是真正的非同步操作,只是把想執行的程式碼放到UI佇列中,在未來執行
Es6中的Promise,裡面的函式是直接執行的,比setTimeout執行的早