全局代码的执行和作用域提升

35 阅读1分钟

代码被解析的过程

  1. 代码被解析,v8引擎内部会帮助我们创建一个对象

    • 该对象所有作用域(scope)都可以访问
    • 里面会包含Date、Array、String、Number、setTimeout、setInterval等等;
    • 其中还有一个window属性指向自己 image.png
  2. 运行代码

    2.1. v8为了执行代码,V7引擎内部会有一个执行上下文栈(Execution Content Stack, ECStack)(函数调用栈)

    2.2.因为我们执行的是全局代码,为了全局代码能够正常运行,需要创建·全局执行上下文( Global Execution Content)(全局代码被执行时才会创建)

image.png

var name = "why"
var num1 = 20
var num2 = 30
var result = num1 + num2

var globalobject = {
    String: "类",
    Date: "类",
    setTimeout: "函数",
    window: globalobject,
    name: undefined,
    num1: undefined,
    num2: undefined,
    result: undefined,
    //虽然js解析的时候会把创建的属性添加到创建的全局对象中,但是代码没有执行,类型为     //undefined
}