javaScript执行机制

一.先编译后执行

1.编译阶段:对变量和函数进行变量提升操作

2.执行阶段:将代码一行一行的执行

javaScript在编译之后,会分为两个部分:执行上下文和可执行代码,执行上下文分为:全局执行上下文,函数执行上下文,eval 执行上下文;

执行上下文包含变量环境,词法环境(当然还包括this等等),那么变量环境和词法环境都是用来存放什么的呢?

变量环境用来存放:变量提升的部分(var)

词法环境用来存放:块级作用域未提升的部分(let,const)

二.调用栈

我们知道了在执行之前会进行变量提升,变量存放在了执行上下文,也就是变量环境和词法环境中,下一步就是按顺序执行,按什么顺序呢,就是栈的顺序(先进后出

注:

1.在执行的时候,才会按照上面所说规则进行入栈

2.浏览器遇到javaScript标签,首先会生成全局的执行上下文,将全局变量放在全局的执行上下文的环境变量中,然后再按照函数的调用顺序一次入栈

三.编译

1.分词:首先编译器会将我们的代码,分解成有意义的代码块,我们将这一个个代码块叫做词法单元

2.解析:再将这些词法单元,解析成抽象语法树(AST)

3.代码生成:将AST转化为可执行代码的过程

三.词法作用域

javaScript采用的是词法作用域,也就是静态作用域,(也就是在编译阶段,就已经确定好了使用哪个变量(发生在分词阶段))。

代码会按照作用域链寻找,知道找到已经变量的值,这里自然就用到了遮蔽,也就是内部的标识符遮蔽了外部的标识符。

 参考文档:JavaScript执行机制一 - 掘金

JavaScript执行机制二(深入之闭包) - 掘金

深入理解javascript作用域系列第二篇——词法作用域和动态作用域 - 小火柴的蓝色理想 - 博客园

深入理解javascript作用域系列第一篇——内部原理 - 小火柴的蓝色理想 - 博客园

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值