执行栈

js 中可执行的代码有哪几类呢?怎么的代码才算是符合规范的。

  1. 当 js 执行全局代码的时候,会编译全局代码并创建全局上下文,全局执行上下文是只有一个的。
  2. 当执行函数的时候,会编译函数中的代码,然后创建函数上下文,函数执行完成之后,上下文就会被销毁。
  3. 执行 eval 函数的时候,eval会被编译,并创建 eval 上下文。

执行上下文

我们写的函数那么多,是如何管理那么多执行上下文的呢?

var a = 1;
function foo() {}

当执行之前,会先编译,创建全局上下文,压入执行栈中。

  1. 执行 foo, js 引擎编译 foo 函数,并创建一个执行上下文,压入栈中。
  2. foo 执行完之后,弹出栈。

理解执行栈的好处

我们可以利用调用栈来追踪函数,我们可以分析调用栈跟踪哪个函数正在被执行和其他函数之间的关系。

  1. 我们可以利用浏览器来查看调用栈的信息。 用于调试
  2. 栈溢出。栈是有大小的,超出一定的数目,就会产生错误。 一般递归没有终止条件就会产生溢出。