JavaScript是單線程的厂榛,也就是在同一個事件內盖矫,只能做一件事丽惭;
JavaScript任務被分為: 同步任務和異步任務;
js引擎中存在有:主線程和任務隊列炼彪;
js引擎解析代碼時吐根,會將所有的同步代碼加入到主線程中依次執(zhí)行正歼,當碰到一個異步任務時辐马,例如ajax,js引擎發(fā)送完ajax請求后局义,并不會等待響應喜爷,而是繼續(xù)執(zhí)行主線程上的代碼,當收到發(fā)送ajax請求的響應后萄唇,js引擎會在任務隊列中添加該事件檩帐, 并且將響應結果及相應的回調加入任務隊列中,當主線程上的同步任務都執(zhí)行完成后另萤,js引擎會到任務隊列中取出排在第一位的事件湃密,并將其回調函數(shù)添加到主線程中執(zhí)行,按照這個步驟依次執(zhí)行下去四敞;
js的任務分為 macro task(宏任務)和 micro task(微任務)
setTimeout()
和setInterval()
屬于宏任務
Promise
屬于微任務
微任務的優(yōu)先級要高于宏任務泛源,js引擎會先從取出微任務,然后再去宏任務中查找