Javascript 简明教程
JavaScript - let Statement
What is JavaScript let statement?
JavaScript ${s0} 语句用于声明变量。使用 let 语句,我们可以声明一个变量是什么 ${s1}。这意味着使用 let 声明的变量只能在定义它的代码块中访问。
${s2} 关键字在 JavaScript 的 ES6(2015) 版本中引入。它是 ${s3} 关键字的替代品。
引入 ${s4} 关键字的主要原因是改进变量的范围行为和代码的安全性。
JavaScript Block Scope vs. Function Scope
使用 ${s6} 关键字声明的变量的范围是块范围。这意味着如果使用 let 关键字在特定块中定义变量,则只能访问该特定块内的变量,如果你尝试在块外部访问变量,它会引发一个错误,如“变量未定义”。
{
let x = "John";
}
//here x can't be accessed
${s7} 关键字具有函数范围,这意味着如果你在任何函数块中使用 var 关键字定义变量,则可以在整个函数中访问它。
function foo(){
if (true){
let x = 5
var y = 10
}
// here x can't be accessed while y is accessible
}
有时,我们需要在某个函数的不同块中使用相同名称的变量。如果它们使用 var 关键字,可能会发生变量值冲突。
Example
在下面的示例中,我们使用 let 关键字定义了变量 ${s8},使用 var 关键字定义了变量 ${s9}。此外,我们分别为这两个变量赋值为 10 和 20。
我们定义了 test() 函数,重新声明了 x 和 y 变量,并分别将它们初始化为 50 和 100。我们在函数内部打印变量值,它打印 50 和 100,因为它优先选择局部变量而不是全局变量。
<html>
<head>
<title> Variable declaration with let keyword </title>
</head>
<body>
<script>
let x = 10;
var y = 20;
function test() {
let x = 50;
var y = 100;
document.write("x = " + x + ", y = " + y + "<br/>");
}
test();
</script>
</body>
</html>
Example
在下面的示例中,我们用“true”值初始化了 bool 变量。然后,我们在“if”块中用 let 和 var 关键字声明了变量 x 和 y。
我们在“if”块中打印 x 和 y 变量的值。我们不能在“if”块之外访问“x”变量,因为它具有块范围,但我们可以访问“if”块之外和函数块之内的变量 y,因为它具有函数范围。
<html>
<head>
<title> Variable declaration with let keyword </title>
</head>
<body>
<script>
function test() {
let bool = true;
if (bool) {
let x = 30;
var y = 40;
document.write("x = " + x + ", y = " + y + "<br/>");
}
// x can't be accessible here
document.write("y = " + y + "<br/>");
}
test();
</script>
</body>
</html>
通过这种方式,let 关键字用于改善代码的范围行为。
Redeclaring Variables in JavaScript
您无法在同一块中重新声明使用 let 关键字声明的变量。但是,您可以使用同一函数在不同块中声明名称相同的变量。
Example
在下面的示例中,您可以观察到使用 let 关键字声明的变量无法在同一块中重新声明,但使用 var 关键字声明的变量可以在同一块中重新声明。
代码在输出中打印新声明的变量值。
<html>
<head>
<title> Variable redeclaring </title>
</head>
<body>
<script>
function test() {
if (1) {
let m = 70;
// let m = 80; // redeclaration with let keyword is not possible
var n = 80;
var n = 90; // redeclaration with var keyword is possible
document.write("m = " + m + ", n = " + n);
}
}
test();
</script>
</body>
</html>
Variable Hoisting
JavaScript 中的 hoisting 行为将变量的声明移动到代码顶部。 let 关键字不支持提升,但 var 关键字支持提升。
Example
在下面的示例中,您会看到我们可以使用 var 关键字初始化并打印变量 n 的值,然后才能进行声明。
<html>
<head>
<title> Variable hoisting </title>
</head>
<body>
<script>
function test() {
// Hoisiting is not supported by let keyword
// m = 100;
// document.write("m = " + m + "<br/>");
// let m;
n = 50;
document.write("n = " + n + "<br/>");
var n;
}
test();
</script>
</body>
</html>
您可以使用 let 关键字取消对代码的注释并检查 Web 控制台中的错误,因为它不支持提升。