简述javascript的执行原理,javascript在什么地方执行

本篇文章给大家谈谈简述javascript的执行原理,以及javascript在什么地方执行,希望对各位有所帮助,不要忘了收藏本站喔。

JavaScript的执行过程
1、过程1:解析
在这里插入图片描述
V8引擎在堆内存中创建一个全局对象:Global Object
1)这个对象可以访问所有的作用域;
2)里面包含Date、Array、String、Number、setTimeout、setInterval等
3)其中还有一个window属性指向自己,也就是指向Global Object对象
在这里插入图片描述
2、过程2:运行代码
①V8为了运行代码,内部会有一个执行上下文栈(Execution Context Stack,简称ECStack函数调用栈),用于执行代码的调用栈,一般是在里面放函数的。
②因为我们要执行的是全局代码,为了全局代码能够正常的运行,需要创建一个全局的代码块Global Execution Context (GEC),GEC会被放进ECS中执行python for语句用法
③GEC被放入ECS中包含两部分内容:
第一部分:在代码执行前,在parser转成AST的过程中,会将全局定义的变量、函数等加入到GlobalObject中,但是不会被赋值;这个之中涉及到变量的作用域提升。
在这里插入图片描述
第二部分:在代码执行中,对变量赋值,或者执行其他函数。

遇到函数该如何执行?
但是在执行函数的时候,和变量不太一样,变量涉及到作用域提升的问题,但是如果定义了一个函数,那么函数调用写在函数定义之前或者之后都能够执行。因为在解析阶段解析出这是一个函数,那么就会为这个函数创建一个存储函数对象,然后指向它,在需要调用的时候去执行函数体内部的代码。
1)在解析函数称为AST树结构时,会创建一个Activation Object(AO):AO中包含形参,arguments、函数定义和指向函数对象、定义的变量。
在这里插入图片描述

执行阶段:
在这里插入图片描述
执行完毕:
在这里插入图片描述
如果想要再次调用函数foo,就直接从头到尾再执行一遍。
2)作用域链:由VO(也就是函数中的AO对象)和父级VO组成,查找时会一层一层查找
函数中嵌套函数的情况
在这里插入图片描述

在这里插入图片描述

执行阶段
在这里插入图片描述
当执行bar()中的打印工作的时候,寻着作用域链去找name,最终能找到GO中的name
执行结束
在这里插入图片描述
最终两个函数的执行上下文都会弹出调用栈然后被销毁,它们指向的AO对象也会销毁。

函数中调用函数的情况
编译阶段
在这里插入图片描述
执行代码
函数的父级作用域和它的定义位置有关系,和调用位置是没有关系的。
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值