返回

链锁 JS 中的执行上下文

前端

执行上下文:链条式指令执行

当 JS 代码开始执行时,首先创建一个全局执行上下文,并将该执行上下文压入调用栈中。全局执行上下文包含全局变量对象和全局作用域链。

当遇到函数调用时,将创建该函数的执行上下文,并将该执行上下文压入调用栈中。函数执行上下文包含函数变量对象、函数作用域链和this指针。函数执行完毕后,该函数的执行上下文将从调用栈中弹出。

作用域链:链条式搜索

作用域链是一个由执行上下文组成的链。当查找变量时,会从当前执行上下文的变量对象开始搜索。如果没有找到,则会沿着作用域链向上搜索,直到找到该变量或到达全局执行上下文。作用域链可以帮助我们理解变量的访问权限。

闭包:保存执行上下文

闭包是一个可以访问其他函数内部变量的函数。闭包通过保存其创建时的执行上下文来实现此目的。这意味着闭包可以访问其创建时的局部变量,即使这些变量在创建闭包的函数执行完毕后仍然存在。闭包经常被用于事件处理和数据封装。

通俗示例:理解执行上下文

为了更清楚地理解执行上下文,让我们来看一个简单的示例:

var globalVariable = "Global";

function outerFunction() {
  var outerVariable = "Outer";

  function innerFunction() {
    var innerVariable = "Inner";
    console.log(globalVariable); // "Global"
    console.log(outerVariable); // "Outer"
    console.log(innerVariable); // "Inner"
  }

  innerFunction();
}

outerFunction();

在这个示例中,首先创建了全局执行上下文,并将全局变量对象压入调用栈中。当 outerFunction 被调用时,会创建该函数的执行上下文,并将该执行上下文压入调用栈中。outerFunction 的执行上下文包含 outerVariable 变量对象和 outer 作用域链。

当 innerFunction 被调用时,会创建该函数的执行上下文,并将该执行上下文压入调用栈中。innerFunction 的执行上下文包含 innerVariable 变量对象和 inner 作用域链。innerFunction 的作用域链包括 innerFunction 的执行上下文、outerFunction 的执行上下文和全局执行上下文。

innerFunction 执行时,会从其作用域链中查找变量。首先在 innerFunction 的变量对象中查找,如果没有找到,则沿作用域链向上搜索。在 outerFunction 的变量对象中找到 outerVariable,在全局执行上下文的变量对象中找到 globalVariable。

总结:执行上下文的关键作用

执行上下文是一个重要的概念,它定义了代码执行时的上下文环境。执行上下文主要包括变量对象、作用域链和 this 指针。闭包和作用域链是理解 JS 执行上下文的重要组成部分。通过理解这些概念,我们可以更好地理解 JS 代码的执行过程和变量的访问权限。