1. 程式人生 > >調用棧

調用棧

tac 開始 一個 inf ash image after ret --

引擎由兩個主要組件組成:
*內存堆 - 這是內存分配發生的地方
*調用堆棧 - 這是您的代碼執行時堆棧幀的位置、

技術分享圖片

事件循環回調隊列

技術分享圖片

JavaScript是一種單線程編程語言,這意味著它只有一個Call Stack。因此,它可以一次做一件事。

調用棧是一種數據結構,它基本上記錄了程序中的位置。如果我們進入函數,我們將它放在堆棧的頂部。如果我們從函數返回,我們會彈出堆棧的頂部。這就是所有堆棧都可以做到的。

我們來看一個例子吧。看一下下面的代碼:

1 function multiply(x, y) {
2     return x * y;
3 }
4 function
printSquare(x) { 5 var s = multiply(x, x); 6 console.log(s); 7 } 8 printSquare(5);

當引擎開始執行此代碼時,調用堆棧將為空。之後,步驟如下:

技術分享圖片

調用堆棧中的每個條目稱為堆棧幀

這正是拋出異常時堆棧跟蹤的構造方式 - 它基本上是異常發生時調用堆棧的狀態。看一下下面的代碼:

 1 function foo() {
 2     throw new Error(‘SessionStack will help you resolve crashes :)‘);
 3 }
4 function bar() { 5 foo(); 6 } 7 function start() { 8 bar(); 9 } 10 start();

調用棧