一:調用棧是個什么鬼東西,它具有棧的屬性--后進先出
先看一段簡單的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