js 执行栈

执行栈

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

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

执行上下文

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

var a = 1;
function foo() {}

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

  1. 执行 foo, js 引擎编译 foo 函数,并创建一个执行上下文,压入栈中。
    内存图

  2. foo 执行完之后,弹出栈。
    内存图

理解执行栈的好处

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

  1. 我们可以利用浏览器来查看调用栈的信息。 用于调试
  2. 栈溢出。栈是有大小的,超出一定的数目,就会产生错误。 一般递归没有终止条件就会产生溢出。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值