JavaScript 的作用域是关于变量、函数和对象的可访问性。作用域决定了代码块中声明的变量和函数的可访问性。在 JavaScript 中,主要有两种类型的作用域:全局作用域和局部作用域。
- 全局作用域:在代码的任何地方都可以访问全局作用域中的变量。当你在所有函数外部声明一个变量时,该变量就位于全局作用域中。
例如:
var globalVar = "I'm global!";
- 局部作用域(函数作用域):在函数内部声明的变量具有局部作用域。这些变量只能在其所在的函数内部访问。
例如:
function myFunction() {
var localVar = "I'm local!";
}
在函数内部,localVar
可以被访问,但在函数外部则不行。
注意,JavaScript 并没有块级作用域(如 C++ 中的 {}
块)。然而,let
和 const
在 ES6 中引入了一种新的块级作用域,但这与全局作用域和函数作用域是不同的概念。
还有一个重要的概念是词法作用域,它指的是变量在声明它们的作用域内始终可用,即使它们在嵌套的函数或代码块内部。在 JavaScript 中,由于其解释器的词法作用域,你可以在函数内部访问在函数外部声明的变量(称为外部变量)。
例如:
var globalVar = "I'm global!";
function myFunction() {
console.log(globalVar); // "I'm global!"
}
在这个例子中,myFunction
可以访问和操作在它之外声明的 globalVar
。
最后,从 ES6 开始,JavaScript 引入了块级作用域的 let
和 const
关键字。使用这些关键字声明的变量只在声明它们的块或 if
/for
/while
等语句块内部可见。它们在语义上更加清晰,也有助于避免一些可能出现的错误。
例如:
if (true) {
let x = 10;
console.log(x); // 10
}
console.log(x); // ReferenceError: x is not defined
在这个例子中,x
只在 if
语句块内部可见。在块外部尝试访问 x
会抛出一个错误。