V8执行过程

本文详细阐述了V8引擎的执行流程,从字符格式转换到堆栈执行,包括Scanner的词法分析,Parser和preParser生成AST,Ignition的字节码解释以及TurboFan的编译。在堆栈执行部分,介绍了执行环境的准备、执行上下文的管理和变量对象VO的作用。函数堆栈处理涉及作用域链、this的确定、arguments对象以及形参赋值。闭包堆栈处理讨论了如何形成闭包以及其对内存管理的影响,特别是如何保护私有变量。
摘要由CSDN通过智能技术生成

一、V8执行流程

1. 字符格式转换

2. Scanner扫描代码 词法分析 语法分析

3. Parser 和preParser 解析和预解析,生成抽象语法树AST(preParser中如果变量定义后未使用 则不会生成AST,但会创建无变量引用和声明的scope);

4. Ignition V8的解释器,将AST转化为字节码

5. TurboFan V8编译器模块 转化未汇编代码;

6. 堆栈执行过程

二、堆栈执行

1. 准备JS环境准备

2. 执行环境栈(ECStack 执行上下文栈)(代码需要执行时开辟的一个空间)

初始化时还申请了GO空间

3. 执行上下文(为了隔绝在不同空间的数据)EC(G)

4. VO(G)全局变量对象(认为所有的变量声明都存在于这里)

基本数据类型按值访问:我的理解中js基本数据类型的变量会指向一个内存空间,而这个空间的存放变量的值,而这个值是由原始值组成的(原始值代表基础的数字/字母);(needtodo待深究)

执行环境栈执行时从栈顶到栈底,执行的是一个个的执行上下文&#

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值