执行上下文

43 阅读1分钟

执行上下文

JavaScript的执行过程

image.png

  1. 初始化全局对象

JavaScript → AST 阶段:

js引擎会在执行代码之前(编译),会在堆内存中创建一个全局对象:GlobalObject(GO) 该对象 所有的作用域(scope)都可以访问; 里面会包含Date、Array、String、Number、setTimeout、setInterval等等; 其中还有一个window属性指向自己;

  1. 执行上下文栈Execution Context Stack ,ECS

执行的是全局的代码块

  • 全局的代码块为了执行会构建一个 Global Execution Context(GEC)
  • GEC会 被放入到 ECS 中 执行

GEC被放入到ECS中里面包含两部分内容:

  • 第一部分:在代码执行前,在parser转成AST的过程中,会将全局定义的变量、函数等加入到GlobalObject中,但是并不会赋值;这个过程也称之为变量的作用域提升(hoisting)
  • **第二部分:**在代码执行中,对变量赋值,或者执行其他的函数;
  1. 遇到函数该如何执行?

image.png

image.png

!闭包例外(被引用的AO不会被销毁)

image.png (图 1 源代码顶端缺少代码:var message = "Hello World")

var message = "Hello Global"

function foo(){
	console.log(message)
}

function bar(){
	var message = "Hello Bar"
	foo()
}

bar()

// Hello Global

image.png

image.png