JavaScript 执行上下文

执行上下文(execution context)是 JavaScript 中最为重要的一个概念。执性上下文定义了变量或函数有权访问的其他数据,决定了他们各自的行为。

对于每个执行上下文,都有三个重要属性:

  • 变量对象(Variable object,VO)
  • 作用域链(Scope chain)
  • this

执行上下文的生命周期可以分为两个阶段:创建阶段代码执行阶段。我们在本篇里的重点就是,分别来看看这两个阶段 JavaScript 的都做了些什么事情。

创建执行上下文阶段

这个阶段中,执行上下文会分别创建变量对象,建立作用域链,以及确定 this 的指向。

代码执行阶段

创建完成之后,就会开始执行代码,这个时候,会完成变量赋值,函数引用,以及执行其他代码。

全局执行上下文 VS 函数执行上下文

全局执行上下文和函数执行上下文的主要区别是在他们的变量对象上的差异。

全局执行上下文

在 Web 浏览器中,全局执行上下文的变量对象被认为是 window 对象。 windowEC = { VO: Window, scopeChain: {}, this: Window }

函数执行上下文

在函数的执行上下文,将其活动对象(activation object)作为变量对象。活动对象在最开始时只包含一个变量,即 arguments 对象(这个对象在全局环境的变量对象中不存在的)

参考链接