JavaScript作用域

34 阅读2分钟

JavaScript 的作用域是关于变量、函数和对象的可访问性。作用域决定了代码块中声明的变量和函数的可访问性。在 JavaScript 中,主要有两种类型的作用域:全局作用域和局部作用域。

  1. 全局作用域:在代码的任何地方都可以访问全局作用域中的变量。当你在所有函数外部声明一个变量时,该变量就位于全局作用域中。

例如:

var globalVar = "I'm global!";
  1. 局部作用域(函数作用域):在函数内部声明的变量具有局部作用域。这些变量只能在其所在的函数内部访问。

例如:

function myFunction() {
  var localVar = "I'm local!";
}

在函数内部,localVar 可以被访问,但在函数外部则不行。

注意,JavaScript 并没有块级作用域(如 C++ 中的 {} 块)。然而,letconst 在 ES6 中引入了一种新的块级作用域,但这与全局作用域和函数作用域是不同的概念。

还有一个重要的概念是词法作用域,它指的是变量在声明它们的作用域内始终可用,即使它们在嵌套的函数或代码块内部。在 JavaScript 中,由于其解释器的词法作用域,你可以在函数内部访问在函数外部声明的变量(称为外部变量)。

例如:

var globalVar = "I'm global!";

function myFunction() {
  console.log(globalVar); // "I'm global!"
}

在这个例子中,myFunction 可以访问和操作在它之外声明的 globalVar

最后,从 ES6 开始,JavaScript 引入了块级作用域的 letconst 关键字。使用这些关键字声明的变量只在声明它们的块或 if/for/while 等语句块内部可见。它们在语义上更加清晰,也有助于避免一些可能出现的错误。

例如:

if (true) {
  let x = 10;
  console.log(x); // 10
}
console.log(x); // ReferenceError: x is not defined

在这个例子中,x 只在 if 语句块内部可见。在块外部尝试访问 x 会抛出一个错误。