title | slug | l10n | ||
---|---|---|---|---|
作用域 |
Glossary/Scope |
|
{{GlossarySidebar}}
作用域是当前的执行上下文,在其中的{{glossary("value", "值")}}和表达式“可见”(可被访问)。如果一个{{glossary("variable", "变量")}}或表达式不在当前的作用域中,那么它是不可用的。作用域也可以堆叠成层次结构,子作用域可以访问父作用域,反过来则不行。
JavaScript 的作用域分以下三种:
- 全局作用域:脚本模式运行所有代码的默认作用域
- 模块作用域:模块模式中运行代码的作用域
- 函数作用域:由{{glossary("function", "函数")}}创建的作用域
此外,用 let
或 const
声明的变量属于额外的作用域:
- 块级作用域:用一对花括号(一个代码块)创建出来的作用域
由于{{glossary("function","函数")}}会创建作用域,因而在函数中定义的变量无法从该函数外部访问,也无法从其他函数内部访问,例如,下面的代码是无效的:
function exampleFunction() {
const x = "函数内定义"; // x 只能在 exampleFunction 函数中使用
console.log("在函数内");
console.log(x);
}
console.log(x); // 报错
但是,下面的代码是有效的,因为变量在函数外被声明,为全局变量:
const x = "函数外定义";
exampleFunction();
function exampleFunction() {
console.log("函数内");
console.log(x);
}
console.log("函数外");
console.log(x);
块级作用域只对 let
和 const
声明有效,但是对 var
声明无效。
{
var x = 1;
}
console.log(x); // 1
{
const x = 1;
}
console.log(x); // ReferenceError: x is not defined
- 维基百科上的作用域