在JavaScript中,关键字var
和let
都用于声明变量。
let
关键字是在后来称为 ES6(ES2015)的JavaScript的更高版本中引入的。这是声明变量的首选方式。
var
在函数内部声明的变量可以在函数中的任何位置使用。例如,// 打印文本的程序
// 变量 a 不能在这里使用
function greet() {
//变量 a 可以在这里使用
var a = 'hello';
console.log(a);
}
// 变量 a 不能在这里使用
greet();//hello
在上面的程序中,变量 a 用var
声明。变量 a 可以在函数greet
中的任何位置使用。
let
声明的变量只能在代码块内访问。例如,
// 变量 a 不能在这里使用
function greet() {
let a = 'hello';
//变量 b 不能在这里使用
if(a == 'hello'){
//变量 b 可以在这里使用
let b = 'world';
console.log(a + ' ' + b);
}
//变量 b 不能在这里使用
console.log(a + ' ' + b);//error
}
// 变量 a 不能在这里使用
greet();
输出
hello world Uncaught ReferenceError: b is not defined
在上面的程序中,变量 a 在函数内部声明,并且可以在函数内部的任何位置进行访问( a 成为函数作用域)。
但是,变量 b 是在if
块语句中声明的。 b 将是块作用域的,只能在 if
块内部访问。
因此,当您尝试访问if
块之外的 b 时,会发生错误(如程序上方所示)。
1. 可以再次声明用var
声明的变量。例如,
var a = 5;//5
var a = 3;//3
用let
声明的变量不能在同一块或同一范围内重新声明。例如,
let a = 5;
let a = 3;//error
输出
Uncaught SyntaxError: Identifier 'a' has already been declared
2. 使用var
在其他范围或块中重新声明变量也会更改外部变量的值。例如,
var a = 5;
console.log(a);//5
{
var a = 3;
console.log(a);//3
}
console.log(a);//3
使用let
在不同的范围或块中重新声明变量会将该变量视为不同的变量。并且外部变量的值不变。例如,
let a = 5;
console.log(a);//5
{
let a = 3;
console.log(a);//3
}
console.log(a);//5
3. 在循环中使用以var
声明的变量时,该变量的值将更改。例如,
var a = 2;
for(var a = 0; a < 3; a++) {
console.log('hello');
}
console.log(a);//3
在上面的程序中,for
循环重新声明变量 a 。因此,最后a
的值将更改为 3 。
在循环中使用以 let 声明的变量时,变量的值不会更改。例如,
let a = 2;
for(let a = 0; a < 3; a++) {
console.log('hello');
}
console.log(a);//2
在上述程序中,for
循环将变量 a 视为与上面声明的变量不同的变量。并且该变量的范围仅在for
循环内。因此变量 a 的值最后保留为 2 。
用var
声明的变量被提升到程序范围的顶部。例如,
console.log(a);
var a;//undefined (not an error)
关键字let
不允许提升。例如,
console.log(a);
let a;//Uncaught ReferenceError: a is not defined
如果您想了解有关提升的更多信息,请访问 JavaScript hoisting。
大多数现代浏览器都支持使用let
。但是,某些浏览器不完全支持let
。
要了解更多信息,请访问 JavaScript让浏览器支持。
注意:在全局范围内,var
和let
的行为方式相同。例如,
var a = 5;//5
变量 a 将是全局范围的,并且可以在程序中的任何位置进行访问。
let a = 5;//5
变量 a 将是全局范围的,并且可以在程序中的任何位置进行访问。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)