原文地址浏览器
咱们知道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();