一,棧(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 最好先初始化,不然用到的時候沒初始化會產生奇怪的錯誤...