范围是指代码某些部分中变量和函数的可用性。
在JavaScript中,变量具有两种范围:
在程序顶部或函数外部声明的变量被视为全局范围变量。
让无涯教程来看一个全局范围变量的例子。
// 打印文本的程序
let a = "hello";
function greet () {
console.log(a);
}
greet();//hello
在上述程序中,变量 a 在程序顶部声明,并且是全局变量。这意味着变量 a
可以在程序中的任何位置使用。
可以在函数内部更改全局变量的值。例如,
// 显示全局变量变化的程序
let a = "hello";
function greet() {
a = 3;
}
// 在函数调用之前
console.log(a);
//函数调用后
greet();
console.log(a);//3
在上面的程序中,变量 a 是全局变量。 a 的值是 hello 。然后在函数内部访问变量 a ,值更改为 3。
因此, a 的值在函数内部更改后会更改。
注意:避免使用全局变量是一个好习惯,因为全局变量的值可能会在程序的不同区域中发生变化。它可能会在程序中引入未知结果。
在JavaScript中,也可以在不声明的情况下使用变量。如果使用了未声明的变量,则该变量将自动成为全局变量。
例如,
function greet() {
a = "hello"
}
greet();
console.log(a);//hello
在上面的程序中,变量 a 是全局变量。
如果使用 let a =" hello"
声明了变量,则程序将引发错误。
注意:在JavaScript中,存在"严格模式";
,其中的变量必须在未声明的情况下使用。要了解有关严格的更多信息,请访问 JavaScript 严格。
变量也可以具有局部作用域,即只能在函数内访问。
// 显示变量局部范围的程序
let a = "hello";
function greet() {
let b = "World"
console.log(a + b);
}
greet();
console.log(a + b);//error
输出
helloWorld Uncaught ReferenceError: b is not defined
在上面的程序中,变量 a 是全局变量,变量b是局部变量。只能在函数 greet 中访问变量 b 。因此,当无涯教程尝试在函数外部访问变量 b 时,会发生错误。
let
关键字是块作用域的。
// 显示块范围概念的程序
// global variable
let a = 'Hello';
function greet() {
//local variable
let b = 'World';
console.log(a + ' ' + b);
if (b == 'World') {
//block-scoped variable
let c = 'hello';
console.log(a + ' ' + b + ' ' + c);
}
//variable x cannot be accessed here
console.log(a + ' ' + b + ' ' + c);
}
greet();
输出
Hello World Hello World hello Uncaught ReferenceError: x is not defined
在上面的程序中,变量
链接:https://www.learnfk.comhttps://www.learnfk.com/es6/variable-scope.html
来源:LearnFk无涯教程网
greet
中访问它。 if
语句块内访问它。因此,在上述程序中,前两个 console.log()
可以正常工作。
但是,无涯教程试图在第三个 console.log()
中的块外部访问块范围变量 c 。这将引发错误。
注意:在JavaScript中, var
是函数范围的,而 let
是块作用域的。如果您在上述程序的 if
语句中尝试使用 var c ='hello';
,则整个程序都可以正常工作,因为 c 是视为局部变量。
要了解有关 let
与 var
的更多信息,请访问 JavaScript let vs var 。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)