JS作用域

321 阅读3分钟

当谈到 JavaScript 编程,作用域是一个至关重要的概念,它指定了变量和函数在代码中的可见性和访问权限。在 JavaScript 中,我们有三种主要的作用域类型,它们分别是全局作用域、函数作用域和块级作用域。让我们深入探讨每种类型的作用域及其示例。

1.全局作用域

全局作用域是 JavaScript 程序的最高层次作用域,包含整个程序的变量和函数。在全局作用域中声明的变量和函数可以在程序的任何地方访问。

当谈到 JavaScript 中的全局作用域,可以将其看作是整个 JavaScript 世界的大舞台。这个大舞台包括了你的整个程序,任何东西都可以在这里发挥作用。在全局作用域中定义的变量和函数就像是全局明星,它们可以在任何地方使用,从任何函数或代码块中都可以看到它们。

下面是一个例子

         
// 在全局作用域中声明一个全局变量
var globalVar = "我在全局作用域中";

// 在全局作用域之外访问全局变量
function accessGlobalVar() {
  console.log(globalVar);
}

accessGlobalVar(); // 输出: "我在全局作用域中"

1.1.png

2.函数作用域

函数作用域是指变量和函数在函数内部声明时的作用域,这些变量和函数只能在声明它们的函数内部访问。每当你创建一个新函数,就会创建一个新的函数作用域。

函数作用域类似于一块私密空间,只有在这片空间的大家才能互相看到。

下面是一个例子

    var outerVar = "我在外部函数中";
    
    function innerFunction() {
      var innerVar = "我在内部函数中";
      console.log(outerVar); // 在内部函数中访问外部函数的变量
    }
  
    innerFunction();
    // console.log(innerVar); // 尝试在外部函数中访问内部函数的变量,这会导致错误
  }
  
  outerFunction();
  

2.2.png

3. 块级作用域

块级作用域是通过 `let` 和 `const` 声明引入的,它们定义了变量和函数在特定代码块内的可见性。传统的 `var` 声明不具备块级作用域。

块级作用域就像是一个小盒子,只有在这个盒子内部声明的东西才能被看到和使用。这个盒子通常是由一对大括号 `{}` 包围的一段代码,比如一个 `if` 语句或一个循环。

下面是一个例子

    if (true) {
      let blockVar = "我在块级作用域中";
      var oldVar = "我在函数作用域中";
    }
  
    // console.log(blockVar); // 尝试在块外部访问块级变量,这会导致错误
    console.log(oldVar); // 由于 "oldVar" 使用了 var 声明,它在块外部也可见
  }
  
  exampleBlockScope();
  

3.3.png

作用域是 JavaScript 语言中的一个关键概念,对于理解变量的可见性、避免冲突以及编写清晰的代码至关重要。不同类型的作用域(全局、函数、块级)为开发人员提供了不同级别的控制,有助于编写更加模块化和可维护的代码。