执行上下文

8/9/2022 执行上下文ExecutionContext

# 前言

JavaScript引擎执行一段代码,会进行编译并创建执行上下文。 执行上下文是当前JavaScript代码被编译和执行时所处的环境,也可称为执行环境。

记住:JavaScript所有代码运行的时候都会处于一个执行上下文中,代码执行的一个抽象的环境概念。

执行上下文

# 执行上下文的类型

三种类型:

  • 全局执行上下文
    当JavaScript引擎执行全局代码(不在任何函数中的代码)的时候,会编译全局代码并创建全局执行上下文,整个页面的生存周期内(浏览器窗口未关闭),全局执行上下文只有一个
  • 函数执行上下文
    当调用一个函数,函数体内代码会进行编译并创建函数执行上下文,一般情况,函数执行完毕,创建的函数执行上下文被销毁。可以有很多个函数执行上下文。
  • eval执行上下文:问就是不知道

# 执行上下文的生命周期

  1. 创建
    • 创建变量对象 => var变量、函数声明提升;初始化函数参数arguments
    • 创建词法环境 => let和const变量、外部词法环境(作用域链信息)
    • 确定this指向 => 全局默认指向、作为对象方法指向、显示指向、new构造指向
  2. 执行
    • 代码执行 => 变量赋值、函数引用、可执行代码执行
  3. 销毁
    • 函数调用执行完毕 => 函数出栈、对应执行上下文也出栈、等待垃圾回收
    • 全局执行上下文销毁 => 浏览器窗口关闭

# 变量对象(环境)(Variable Object)里面有什么?

全局执行上下文对应的变量对象是window对象
函数执行上下文:

VO = {
  // 实参 => 当前执行上下文中的参数
  Arguments: {},
  // 形参
  Param_Variable: 'any',
  // 当前执行上下文中函数声明的引用
  Function: 'function reference',
  // 当前执行上下文中变量声明,给初值undefined
  Variable: undefined,
}
1
2
3
4
5
6
7
8
9
10

# 总结

  • 执行上下文就是JavaScript代码运行的环境。
  • 包含三个东西:变量对象(环境)、词法环境(作用域链)、this指向。
  • JavaScript引擎配合着执行上下文才能正确找到变量,去执行代码。
Last Updated: 9/5/2022, 4:22:29 PM