一、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待深究)
执行环境栈执行时从栈顶到栈底,执行的是一个个的执行上下文&#