返回

变量作用域与内存(下):执行上下文与作用域

前端

一、执行上下文与作用域

在 JavaScript 中,执行上下文(Execution Context)是运行代码的上下文环境,它包含了变量对象(Variable Object)、作用域链(Scope Chain)和当前执行的代码。执行上下文决定了当前代码可以访问的变量和函数,每个上下文都有一个活动对象(Activation Object),上下文定义的变量和函数都存在于这个对象上。

二、全局变量与局部变量

全局变量是在全局上下文中定义的变量,它可以在整个程序中访问。局部变量是在函数或块级作用域中定义的变量,只能在该函数或块级作用域内访问。全局变量在声明时使用 varlet ,局部变量在声明时使用 varletconst 关键字。

三、函数的作用范围

函数的作用范围是指函数可以访问的变量和函数的范围。函数的作用范围包括函数体和函数声明或函数表达式的所在块级作用域。在函数体内定义的变量只能在函数体内访问,不能在函数体外访问。函数声明或函数表达式所在块级作用域中的变量可以在函数体内访问,也可以在函数体外访问。

四、块级作用域

块级作用域是指由花括号 {} 括起来的代码块。块级作用域中的变量只能在该代码块内访问,不能在代码块外访问。块级作用域中的变量在声明时使用 letconst 关键字。

五、执行上下文与作用域的实例

// 全局上下文
var globalVariable = 10;

// 函数上下文
function myFunction() {
  // 局部变量
  var localVariable = 20;
  console.log(globalVariable); // 10
  console.log(localVariable); // 20
}

// 块级上下文
if (true) {
  // 块级变量
  let blockVariable = 30;
  console.log(globalVariable); // 10
  console.log(localVariable); // ReferenceError: localVariable is not defined
  console.log(blockVariable); // 30
}

// 调用函数
myFunction();

// 访问块级变量
console.log(globalVariable); // 10
console.log(localVariable); // ReferenceError: localVariable is not defined
console.log(blockVariable); // ReferenceError: blockVariable is not defined

在上面的示例中,globalVariable 是全局变量,可以在任何地方访问。localVariable 是局部变量,只能在 myFunction 函数体内访问。blockVariable 是块级变量,只能在 if 块级作用域内访问。

六、结论

执行上下文和作用域的概念对于理解 JavaScript 中变量的运作方式非常重要。理解执行上下文和作用域,可以帮助我们编写出更清晰、更易维护的代码。