V8引擎的渲染过程&&js的变量提升

V8引擎的渲染过程&&js的变量提升,第1张

V8引擎的渲染过程&&js的变量提升 浏览器的渲染过程 HTML文件 的执行过程

在浏览器加载HTML文件的时候,遇到js标签,会停止解析HTML,去加载和执行javascript代码

javascript代码的执行需要依靠V8引擎
javascript代码属于高级语言,计算机只能识别机器语言(010100),或者说计算机的CPU只能执行指令

V8引擎的定义:
V8引擎是C++编写的Google开源高性能javascript和webAssembly引擎,它用于Chrome和Node.js等等
V8可以单独运行,也可以嵌入到c++应用程序中

V8引擎解析javascript的过程


javascript代码被解析的详细过程(parse):

    Blink将源码交给V8引擎,Stream获取到源码并且进行编码转化

    Scanner进行词法分析,词法分析会将代码转换成tokens

    接下来tokens会被转换成AST树,经过Parser和PreParser(预编译)
    Parser就是直接将token转换成AST树架构
    PreParser预编译理解

    并不是一开始对所有javascript代码进行编译,在一开始就执行。如果直接对所有javascript代码进行解析,会影响网页运行效率
    V8引擎实现了Lazy Parsing(延迟解析)方案,将不必要的函数进行预解析,就是只解析当时需要的内容,而对于函数的全量解析是在函数调用时候进行

4.生成AST树后,会被Ignition转换成字节码,之后就是代码执行过程

代码执行过程 1、代码准备过程

代码被解析,V8引擎内部会帮助我们创建一个GO对象(Global Object),var globalobject={
String:’’,
Math:’’,//等js的内置属性
age:undefined,

//自己定义的变量
}
运行代码:
1.v8为了执行代码,v8引擎内部会有一个执行上下文栈(调用栈)(Execution Context Stock),简称ECStock
2.为了执行全局代码的正常执行,需要创建全局执行上下文(Global Execution Context)

 var tt='ttt'
  function foo(){
    console.log(tt)
    var gg='gg'
    var mm='mm'
  }
  var oo='oo'

编译过程(只分析变量):
函数解析过程生成了AO对象,在ECStock里边生成了自己的函数执行上下文FEC(Function)

2、代码执行过程

执行的过程 给每个变量赋值
函数执行,通过作用域链找到要赋值的变量

常见面试题型,变量作用域提升…

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5713659.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存