javascript底層學習筆記(1) 堆疊和佇列

2021-09-22 08:13:21 字數 1174 閱讀 7354

一,棧(stack)

特點:棧是一種lifo(last-in-first-out,後進先出)的資料結構,也就是最新新增的項最早被移除

比如說,我們在乙個箱子中放了很多本書,如果你要拿出第二書,那麼你要先把第一本書拿出來,才能拿第二本書出來;拿出第二本書之後,再把第一本書放進去

函式呼叫形成乙個棧幀:

fucntion tur(b)

function emy(y)

console.log(emy(5));

//當呼叫emy時,建立了第乙個棧幀,幀這包含了emy的引數和區域性變數;

//當emy呼叫tur時,第二個棧幀就被建立,並且壓到第乙個幀上,幀中包含了tur的引數和區域性變數;

//當tur返回時,最上面的幀就被彈出棧,此時剩下emy的呼叫幀;

//當emy返回時,棧就空了。

在chrome中打斷點除錯可以很清晰的看到emy先加入,tur後加入,tur先出,emy後出。

二,佇列(queue)

特點:佇列資料結構的訪問規則是fifo(fist-in-first-out,先進先出)。佇列在列表的末端新增項,從列表的前端移除項。

比如說,火車站排隊買票,先到的先買,買好的先走。

我理解的js佇列一般存在於js的event queue中,屬於非同步行為。

一般在js當前執行棧清空後,如果event queue中存在多個排隊項

就會按照先入先出的順序加入到執行棧中執行。

三,堆(heap)

定義:一種存放複雜或者說引用型別的記憶體區域;

特點:①動態分配的記憶體,大小不定,不會自動釋放,存放引用型別,包含引用型別的變數,實際上儲存的不是變數本身,而是指向該物件的指標。

四、棧和堆的區別

棧:所有在方法中定義的變數都是存放在棧中的,隨著方法的執行結束,這個方法的記憶體棧也自然銷毀。訪問速度比較快。

堆:堆記憶體中的物件不會隨方法的結束而銷毀,即便方法結束了,這個物件可能被另乙個引用變數所以引用,建立物件是為了反覆利用,這個物件將被儲存到執行時資料區域。

Javascript之正規表示式的學習筆記

小白正規表示式入門學習 正規表示式30分鐘入門教程 正規表示式regular expression是一種文字模式。它描述了一種字串匹配的模式pattern,可以用來檢查乙個串是否含有某種子串 將匹配的子串替換或者從某個串中取出符合某個條件的子串等。我們將正規表示式分為幾個部分記下筆記,便於理解與使用...

Category底層學習

1 category載入過程本質 在編譯的時候,category會被編譯成叫做 category t的結構體,裡面儲存了屬性列表 協議列表 物件方法 類方法列表。在程式執行時,runtime會將category的資料合併到類物件和元類物件中。所以category的方法屬性資訊還是存在類物件中 只是它...

C Primer Chapter One學習筆記

筆記 1.流 從io裝置上讀入或寫出的字串行,用來說明字元隨時間順序生成或消耗。2.輸入輸出符可連用原因 operator 或operator 返回stream物件。3.要測試程式那個語句出錯,使用cout 4.新建乙個內建型別,如int i 0 最好先初始化,不然用到的時候沒初始化會產生奇怪的錯誤...