原文地址瀏覽器
咱們知道JavaScript是一種解釋性的腳本語言,瀏覽器在運行JS腳本時按照順序從上往下逐行解釋。函數
調用棧是解釋器追蹤函數執行流的一種機制。當執行環境中調用了多個函數函數時,經過這種機制,咱們可以追蹤到哪一個函數正在執行,執行的函數體中又調用了哪一個函數。code
接下經過一個例子來了解調用棧:ip
function multiply(x, y) { return x * y; } function printSquare(x) { ... var s = multiply(x, x); console.log(s); } printSquare(5);
當執行上述代碼時,調用棧的變化以下:get
一開始,咱們獲得一個空空如也的調用棧。隨後,每當有函數被調用都會自動地添加進調用棧,執行完函數體中的代碼後,調用棧又會自動地移除這個函數。最後,咱們又獲得了一個空空如也的調用棧。io
function foo() { throw new Error('SessionStack will help you resolve crashes :)'); } function bar() { foo(); } function start() { bar(); } start();