美文网首页
Javascript代码的执行过程

Javascript代码的执行过程

作者: LcoderQ | 来源:发表于2021-11-17 12:34 被阅读0次

具体看一下一段代码的执行流程:

function foo() {
  var name = 'foo'
  console.log(name);
}

var num1 = 20
var num2 = 30
var result = num1 + num2

console.log(result);

foo()
  • 在将JavaScript源代码parse成为AST抽象语法树时,V8引擎内部会创建一个全局对象Global Object(GO),该对象包含Array,Date,Number等类,另外还包含一个window属性指向GO自己


    image.png
  • 定义的全局变量或函数,也会在解析(编译阶段)的时候加入全局对象GO,但是由于这个时候只是解析,代码并没有真正的执行因此并不会被赋值
    image.png
  • 解析完成后生成了AST,AST经过Ignition生成字节码,然后代码开始运行
  • 在V8中,其内部维护着一个执行上下文Execution Context Stack,简称ECS(函数调用栈),所有的代码在执行的时候都需要放入ECS中。
  • 执行全局代码快的时候,会创建一个全局执行上下文Execution Context Stack,简称ECS,压入执行栈中。
    GEC包含两个部分第一部分:在代码执行前,在parser转成AST的过程中,会将全局定义的变量、函数等加入到GlobalObject中,
    但是并不会赋值
    这个过程也称之为变量的作用域提升(hoisting)
    第二部分:在代码执行中,对变量赋值,或者执行其他的函数;

相关文章

网友评论

      本文标题:Javascript代码的执行过程

      本文链接:https://www.haomeiwen.com/subject/yhmltrtx.html