什么是js执行上下文

64次阅读
没有评论

执行上下文(Execution Context)是JavaScript中非常重要的概念,它是用来跟踪代码的执行环境的。每当JavaScript代码在运行时,都会创建一个新的执行上下文,执行上下文包含了该代码的环境信息和执行过程中所需的所有变量、函数和对象等。执行上下文有三种类型:全局执行上下文、函数执行上下文和eval执行上下文。

  1. 全局执行上下文

全局执行上下文是指代码在全局作用域中执行时创建的执行上下文,只有一个全局执行上下文。当JavaScript代码开始执行时,首先会创建全局执行上下文,并在整个脚本的执行期间一直存在。全局执行上下文包括以下内容:

  • 变量对象(Variable Object):包括全局变量、函数声明和变量声明。
  • this对象:指向全局对象。
  • 作用域链(Scope Chain):指向全局变量对象。
  • 外部环境(Outer Environment):在全局执行上下文中,外部环境为null。
  1. 函数执行上下文

函数执行上下文是指代码在函数内部执行时创建的执行上下文,每当函数被调用时,都会创建一个新的函数执行上下文。函数执行上下文包括以下内容:

  • 变量对象(Variable Object):包括函数参数、函数声明和变量声明。
  • this对象:指向函数调用时所在的对象。
  • 作用域链(Scope Chain):指向函数定义时的作用域链。
  • 外部环境(Outer Environment):指向该函数所在的执行上下文。
  1. eval执行上下文

eval执行上下文是指代码在eval函数中执行时创建的执行上下文,使用eval函数执行代码时会创建一个新的eval执行上下文。eval执行上下文包括以下内容:

  • 变量对象(Variable Object):包括eval函数中声明的变量。
  • this对象:指向全局对象或eval函数所在的对象。
  • 作用域链(Scope Chain):指向eval函数所在的作用域链。
  • 外部环境(Outer Environment):指向eval函数所在的执行上下文。

示例:

let x = 10; // 全局变量

function foo(a, b) {
  let c = 20; // 函数局部变量
  console.log(x + a + b + c);
}

foo(1, 2); // 输出 33

在上面的例子中,首先会创建一个全局执行上下文,其中包含了全局变量x和函数foo的声明。当调用foo函数时,会创建一个新的函数执行上下文,其中包含了函数参数a和b以及函数局部变量c。当执行console.log语句时,JavaScript会沿着作用域链查找变量x、a、b和c的值并进行计算。

正文完
 
评论(没有评论)