調用棧
阿新 • • 發佈:2018-09-25
tac 開始 一個 inf ash image after ret --
引擎由兩個主要組件組成:
*內存堆 - 這是內存分配發生的地方
*調用堆棧 - 這是您的代碼執行時堆棧幀的位置、
事件循環和回調隊列。
JavaScript是一種單線程編程語言,這意味著它只有一個Call Stack。因此,它可以一次做一件事。
調用棧是一種數據結構,它基本上記錄了程序中的位置。如果我們進入函數,我們將它放在堆棧的頂部。如果我們從函數返回,我們會彈出堆棧的頂部。這就是所有堆棧都可以做到的。
我們來看一個例子吧。看一下下面的代碼:
1 function multiply(x, y) { 2 return x * y; 3 } 4 functionprintSquare(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();
調用棧