1. 程式人生 > >JS-呼叫棧、事件迴圈、訊息佇列(也叫任務隊和回撥佇列)、作業佇列(微任務佇列)

JS-呼叫棧、事件迴圈、訊息佇列(也叫任務隊和回撥佇列)、作業佇列(微任務佇列)

一:呼叫棧是個什麼鬼東西,它具有棧的屬性--後進先出
先看一段簡單的JS程式碼:
const second = function(){
console.log('hello there');
}
const first = function() {
console.log('hi,first');
second();
}
console.log('The Start');//直接輸出就是直接進棧,執行完後 出棧
first();//方法先進棧,執行完內部程式,最後出棧
console.log('The End');

二:事件迴圈又是何方妖孽?
形象來說,他和呼叫棧一樣存放的都是要執行的程式。不同的是,只有呼叫棧裡面的才會被執行。
所以,事件迴圈回去判斷呼叫棧裡面的事件是否為為空,就是執行完了沒?要是執行完了,就有坑位,事件迴圈裡面的事件就會塞入呼叫棧。

三:訊息佇列
訊息佇列裡面放的是一些待觸發執行的方法,如點選事件,當觸發之後,會被通知主執行緒去執行
(為什麼只能去主線執行?因為JS是單執行緒的,只有在主執行緒上面的才能被執行,訊息佇列就是不在主執行緒,訊息佇列裡面的想被執行只能去通知主執行緒)

四:工作任務
他的裡面執行的方法優先順序高於訊息佇列裡面的回撥函式
console.log('The Start');//工作任務
const first = function() {
setTimeout(function (){
console.log('hi,first')//訊息佇列裡面的回撥函式
},0)
}
first();
console.log('The End');//工作任務
執行結果為:
The Start
The End
hi,first