范围
作用域是当前执行上下文,在该上下文中,值和表达式是“可见的”或可以引用的。如果变量或表达式不在当前作用域中,则无法使用。作用域还可以分层,以便子作用域可以访问父作用域,反之则不行。
JavaScript 具有以下作用域类型
- 全局作用域:在脚本模式下运行的所有代码的默认作用域。
- 模块作用域:在模块模式下运行的代码的作用域。
- 函数作用域:使用函数创建的作用域。
此外,使用某些语法声明的标识符,包括let
、const
、class
或(在严格模式下)function
,可能属于另一个作用域
- 块作用域:使用一对花括号(块)创建的作用域。
函数创建一个作用域,因此(例如)专门在函数中定义的变量无法从函数外部或其他函数中访问。例如,以下代码无效
js
function exampleFunction() {
const x = "declared inside function"; // x can only be used in exampleFunction
console.log("Inside function");
console.log(x);
}
console.log(x); // Causes error
但是,以下代码是有效的,因为变量是在函数外部声明的,使其成为全局变量
js
const x = "declared outside function";
exampleFunction();
function exampleFunction() {
console.log("Inside function");
console.log(x);
}
console.log("Outside function");
console.log(x);
块仅对let
和const
声明进行作用域,但不包括var
声明。
js
{
var x = 1;
}
console.log(x); // 1
js
{
const x = 1;
}
console.log(x); // ReferenceError: x is not defined
另请参阅
- 作用域(计算机科学) on Wikipedia
- 块作用域规则