返回

一文深入了解 JavaScript 的执行上下文

前端

JavaScript 执行上下文是执行 JavaScript 代码的环境。简单来说,就是 JavaScript 代码在运行时,它所处的那个环境。执行上下文对于理解 JavaScript 代码的执行流程、变量的作用域规则等非常重要。

JavaScript 的执行上下文主要分为两种:

  • 全局执行上下文(Global Execution Context) :它是程序最开始执行时的执行上下文,负责处理全局变量和全局函数的声明和执行。
  • 函数执行上下文(Function Execution Context) :当函数被调用时,就会创建一个新的函数执行上下文,负责处理函数内部的变量和函数的声明和执行。

每个执行上下文都有自己的变量对象和作用域链。变量对象存储着执行上下文中声明的变量,而作用域链则存储着执行上下文中可访问的所有变量对象。

当一个函数被调用时,会创建一个新的执行上下文,并将该函数的作用域链添加到当前执行上下文的顶部。这样,该函数就可以访问当前执行上下文以及所有父执行上下文中的变量。

当函数执行完毕时,它的执行上下文就会被销毁,并从当前执行上下文的顶部移出。

this 代表当前执行上下文的变量对象。在全局执行上下文中,this 代表全局对象(window 对象),而在函数执行上下文中,this 代表函数所属的对象。

调用堆栈是一个先进后出的栈结构,它存储着当前正在执行的函数的执行上下文。当一个函数被调用时,它的执行上下文会被压入调用堆栈,当函数执行完毕时,它的执行上下文会被从调用堆栈中弹出。

词法环境是一个记录变量声明的位置和变量的值的对象。当一个函数被调用时,它的词法环境会被创建,并包含当前执行上下文中的所有变量对象。这样,该函数就可以访问当前执行上下文以及所有父执行上下文中的变量。

变量提升是指 JavaScript 在执行代码之前,会先将所有的变量声明提升到代码块的顶部。这样,即使变量在代码块中声明在使用之前,也不会报错。

代码块是指使用大括号({})括起来的一段代码。代码块可以嵌套,每个代码块都有自己的执行上下文。

strict 模式是一种 JavaScript 的运行模式,它可以使 JavaScript 代码更加安全和严格。在 strict 模式下,一些不严格的语法和行为将被禁止。

上下文切换是指从一个执行上下文切换到另一个执行上下文的过程。上下文切换通常发生在函数调用、返回和异常处理等情况下。

总之,执行上下文是 JavaScript 中一个非常重要的概念。理解执行上下文可以帮助我们更好地理解 JavaScript 代码的执行流程和变量的作用域规则。