V8引擎如何执行JS代码

1.JS引擎工作流程

以下为v8引擎举例:

说明:

  1. 解析器:将js进行解析和预解析,经过词法分析和语法分析后生成AST树;
复制代码
预解析:将不是立即执行函数的函数进行预解析,对其标记为函数,但不解析函数里面的代码,而对函数的全局解析是在函数被调用时才会进行。
  1. 解释器:将AST树转为字节码,并且执行字节码。执行的过程中会标记热点代码(比如执行多次的函数),会把热点代码的字节码传给编译器进行优化。
  2. 编译器:将热点代码的字节码转为机器指令并缓存下来,等解释器下次执行可以直接执行机器指令提高执行效率。 注意: 优化可以提高代码执行速度,但是某些优化会导致错误,比如当一个函数参数类型发生变化时,之前已经优化过的代码可能会出现类型错误,这时就需要进行逆优化,恢复到未优化的状态。

2.js解析过程和执行过程详细操作

1.js解析过程(Parse阶段) 也就是js->AST Tree过程中

  • 对于全局代码解析情况如下
  • 对于函数代码解析情况如下

3.执行时

将全局执行上下文/函数执行上下文压入到执行上下文栈(Execution Context stack)中,从栈顶开始执行,执行上下文还会生成作用域链(scope chain),当代码执行时取值或赋值操作会在当前的VO进行寻找,寻找不到则会去父作用域的VO寻找,以此往上寻找,直到找到全局执行上下文的VO,若找不到则会报错。

4.执行后

会依次将函数执行上下文进行出栈操作

相关推荐
小徐_23332 小时前
wot-ui-cli 1.1.0 发布:支持 OpenCode、Antigravity,wot-ui 图标迁移不再靠猜
前端
__zRainy__3 小时前
Node.js Web 框架选型指南:从 Express 到 Hono 的全景对比
前端·node.js·express·koa·nestjs·egg·fastify
西瓜有点饿3 小时前
PostCSS 和 UnoCSS 的作用和区别
前端·postcss
伟大的兔神4 小时前
我做了一个本地优先的 AI 图片工作台:Loomora v1.0.0 正式发布
前端·javascript·vue.js
90后的晨仔5 小时前
uni-app项目 Vue3 状态管理 Pinia 完全指南:从概念到实战的深度解析
前端
90后的晨仔5 小时前
uni-app 在 iOS 平台跳转页面时移除底部安全区域的完整技术指南
前端
用户938515635075 小时前
React + JWT 登录鉴权底层原理与工程化实践
前端·react.js
zww89491115 小时前
家政派单系统开发实战:架构设计与派单算法指南
前端·系统架构
fangzhanpeng1686 小时前
(前端)2.js变量作用域样例
开发语言·前端·javascript
赵广陆6 小时前
企业实战:web服务集成
前端·pycharm·fastapi