返回

JS 之作用域 & 执行上下文 & this & 闭包

前端

JavaScript 是当今最流行的编程语言之一,它具有独特性和灵活性的特点。在 JS 的世界里,作用域、执行上下文、this 和闭包扮演着至关重要的角色。掌握这些概念对于编写健壮、可读性强的代码至关重要。

作用域

作用域是变量可被访问的范围。在 JS 中,变量的作用域有全局作用域和局部作用域之分。全局作用域是指整个程序都可以访问的变量,而局部作用域是指只在函数或代码块内可访问的变量。在函数内部定义的变量具有局部作用域,它们只在该函数内可用。

执行上下文

执行上下文是 JS 代码运行时的环境,它决定了变量的查找顺序。执行上下文包括以下两个部分:

  1. 变量环境:存储着该执行上下文中的变量和函数。
  2. 作用域链:包含了该执行上下文和所有父执行上下文的变量环境。

this

this 是一个特殊的,它指向当前执行上下文的上下文对象。在全局执行上下文中,this 指向 window 对象。在函数执行上下文中,this 指向函数所属的对象。

闭包

闭包是指一个能够访问其他函数作用域中变量的函数。闭包在 JS 中非常常见,它们可以用于保存状态、实现私有变量和方法,以及编写更灵活的代码。

让我们通过一个简单的例子来理解这些概念:

var globalVariable = "I am a global variable";

function myFunction() {
  var localVariable = "I am a local variable";

  console.log(globalVariable); // "I am a global variable"
  console.log(localVariable); // "I am a local variable"

  function innerFunction() {
    console.log(globalVariable); // "I am a global variable"
    console.log(localVariable); // "I am a local variable"
  }

  innerFunction();
}

myFunction();

在这个例子中,globalVariable 是全局变量,它可以在任何地方访问。localVariable 是局部变量,它只能在 myFunction 函数内部访问。innerFunction 是一个闭包,它可以访问 myFunction 函数内部的变量 localVariable,即使 innerFunction 函数本身不在 myFunction 函数的执行上下文中。

通过对 JS 的作用域、执行上下文、this 和闭包等概念的深入理解,我们可以编写出更健壮、更具可读性的代码。掌握这些基本概念是成为一名优秀的 JS 开发者的必备条件。