Javascript中的Stack
最近買了一堂JS進階課程,會想要找這樣的課程,原因在於我去看了Rxjs的文件還有網路上的教學文章,發現我不太能了解他的設計巧思,尤其是提到functional programming的部分讓我不知道為什麼需要用它,然後我看到了有介紹到functional programming的課程,也包含了很多JS原理解釋,因此決定買起來,並且將內容有趣的部分記錄下來,希望在更了解javascript語言背後的機制之後,能夠寫出更有效率且漂亮的程式。 什麼是 “Stack”? stack是一個LIFO(Last In First Out)的資料結構,就像是只有一個開口的容器,把東西一個一個放進去,等到要拿出來的時候,必須先從最後一個放進去的東西開始拿,也就是說,最先放進去的東西會最後一個被拿出來。stack最基本的操作有push與pop push: 將一筆資料放到stack最上層 pop: 將stack最上層的資料移除 Call stack 當javascript engine在翻譯並且執行js files時,遇到一個function call,會產生一個execution context,將他push進call stack,並且開始執行這個context裡面的程式,call stack最上層的execution context永遠有最高得執行順序。 如果裡面又遇到另一個function call呢?這時候又會產生新的空間並且push進call stack,同樣的開始執行最上層空間內的程式,如此一直重複下去,直到最上層的function call完成了,就會被pop掉。 Stack overflow 當stack的容量滿了,稱為stack overflow,發生這種情況會造成程式crash,可以在chrome的developer console中用個簡單的無限遞迴來模擬 // in chrome console function a() { a(); } a(); // uncaught RangeError: Maximum call stack size exceeded