任務(wù)隊(duì)列又稱消息隊(duì)列
函數(shù)分二種
1、一種是同步函數(shù),一個(gè)接一個(gè)的執(zhí)行
2、一種異步函數(shù),調(diào)用者不會(huì)立即拿到預(yù)期的結(jié)果,而是通過(guò)一定的手段才能拿到,那這個(gè)歌函數(shù)就是異步的
任務(wù)也分二種
1.同步任務(wù)
一個(gè)任務(wù)執(zhí)行完,之后才能執(zhí)行下一個(gè)任務(wù)
例如console.log() for循環(huán)等 promise里的console.log()
2.異步任務(wù)
主線程發(fā)出一個(gè)異步請(qǐng)求,對(duì)應(yīng)的工作線程(例如瀏覽器事件觸發(fā)線程,異步http請(qǐng)求),接受請(qǐng)求并告知主線程已收到,主線程繼續(xù)執(zhí)行后面的代碼,同時(shí)工作線程執(zhí)行異步任務(wù),工作線程完成任務(wù)后,將完成信息放到消息隊(duì)列,主線程通過(guò)實(shí)踐循環(huán)過(guò)程去取任務(wù)消息,然后執(zhí)行一定的動(dòng)作
例如promise里面的reslove ,reject,then()
settimeout setinterval
從異步過(guò)程的角度看,addEventListener 函數(shù)就是異步過(guò)程的發(fā)起函數(shù),事件監(jiān)聽(tīng)器函數(shù)就是異步過(guò)程的回調(diào)函數(shù)。事件觸發(fā)時(shí),表示異步任務(wù)完成,會(huì)將事件監(jiān)聽(tīng)器函數(shù)封裝成一條消息放到消息隊(duì)列中,等待主線程執(zhí)行。
1 setTimeout(function() {
2 console.log(1);
3 },0);
4 console.log(2);
執(zhí)行結(jié)果2,1。因?yàn)橹挥性趫?zhí)行完第二行以后,主線程空了,才會(huì)去任務(wù)隊(duì)列中取任務(wù)執(zhí)行回調(diào)函數(shù)。
異步的代碼和函數(shù),一般會(huì)在下一次事件循環(huán)中執(zhí)行