1. 隊(duì)列簡介(先進(jìn)先出)
- 隊(duì)列是一個(gè)先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu);
-
JS 中沒有隊(duì)列,但是可以用 Array 實(shí)現(xiàn)棧中的所有的功能;
image.png
const queue = [];
queue.push(1); // 入隊(duì)
queue.shift(1); // 出隊(duì)
2. 隊(duì)列使用場景

image.png

image.png

image.png

image.png

image.png

image.png
var RecentCounter = function() {
this.q = [];
}
RecentCounter.prototype.ping = function(t) {
this.q.push(t);
// 將不在范圍內(nèi)的數(shù)據(jù)出棧
while(this.q[0] < t - 3000) {
this.q.shift();
}
return this.q.length;
}
時(shí)間復(fù)雜度O(n)和空間復(fù)雜度O(n)
3. js 異步中的任務(wù)隊(duì)列

image.png
執(zhí)行過程: 一段js代碼剛執(zhí)行會(huì)有一個(gè)匿名的主事件丟到 Callback Queue 中,然后 js 引擎會(huì)去任務(wù)隊(duì)列取一個(gè)事件去執(zhí)行,在執(zhí)行這個(gè)事件的過程中,如果里面有異步任務(wù),他就丟給 WebAPIs去執(zhí)行,自己繼續(xù)去執(zhí)行后面的代碼,WebAPIs執(zhí)行完之后,會(huì)將回調(diào)函數(shù)的js代碼重新丟回 Callback Queue 中,等待 js 引擎執(zhí)行;(按照隊(duì)列的執(zhí)行順序)
