微任務和宏任務屬於一個隊列,主要區別在於它們的執行順序(宏任務執行完如果有可執行的微任務則執行完微任務才會繼續執行下一個宏任務) 宏任務:包括整體代碼script,,setInterval,setImmediate。 微任務:原生Promise(有些實現的promise ...
在之前的一篇文章中簡單理了下JS的運行機制,順着這條線深入就又遇到了幾個概念,什么是事件循環,什么又是宏任務 微任務呢,今天用這篇文章梳理一下。 以下是我自己的理解,如有錯誤,還望不吝賜教。 事件循環與消息隊列 首先大家都知道JS是一門單線程的語言,所有的任務都是在一個線程上完成的。而我們知道,有一些像I O,網絡請求等等的操作可能會特別耗時,如果程序使用 同步模式 等到任務返回再繼續執行,就會使 ...
2021-04-30 16:14 0 1579 推薦指數:
微任務和宏任務屬於一個隊列,主要區別在於它們的執行順序(宏任務執行完如果有可執行的微任務則執行完微任務才會繼續執行下一個宏任務) 宏任務:包括整體代碼script,,setInterval,setImmediate。 微任務:原生Promise(有些實現的promise ...
說事件循環(event loop)之前先要搞清楚幾個問題。 1. js為什么是單線程的? 試想一下,如果js不是單線程的,同時有兩個方法作用dom,一個刪除,一個修改,那么這時候瀏覽器該聽誰的? 2.js為什么需要異步? 如果js不是異步的話 ...
首先,JavaScript是一個單線程的腳本語言。所以就是說在一行代碼執行的過程中,必然不會存在同時執行的另一行代碼,就像使用alert()以后進行瘋狂console.log,如果沒有關閉彈框,控制台 ...
說到宏任務和微任務,我們就不得不提 Event Loop 了 JS的本質是單線: 1. 一般來說,非阻塞性的任務采取同步的方式,直接在主線程的執行棧完成。 2. 一般來說,阻塞性的任務都會采用異步來執行,異步的工作一般會交給其他線程完成,然后回調函數會放到事件隊列中。 當主線程的任務 ...
當我們執行 JS 代碼的時候其實就是往執行棧中放入函數,那么遇到異步代碼的時候該怎么辦?其實當遇到異步的代碼時,會被掛起並在需要執行的時候加入到 Task(有多種 Task) 隊列中。一旦執行棧為空,Event Loop 就會從 Task 隊列中拿出需要執行的代碼並放入執行棧中執行,所以本質上 ...
前言 我們知道JavaScript的單線程,與它的用途有關。作為瀏覽器腳本語言,JavaScript的主要用途是與用戶互動,以及操作DOM。這決定了它只能是單線程,否則會帶來很復雜的同步問題。 ...
事件循環與消息隊列 因為js是單線程腳本語言,一般情況下代碼是同步執行。也就是說js執行代碼是一行一行向下執行的,前面沒有執行完成是不會執行后面的代碼的。 同步和異步的區別其實就在於需不需要排隊的問題 同步:所有任務一視同仁,都得排隊,先來后到; 異步 ...
JavaScript的執行流,無論是瀏覽器還是Node.js,都是基於 事件循環 。 理解事件循環能夠讓我們寫出更可靠的高性能代碼。 讓我們先介紹一下事件循環的原理,然后再來看看實際應用。 事件循環(Event Loop) 事件循環的概念非常簡單。它就是一個無止境的循環 ...