我刚刚阅读了 Kyle Simpsons “您不知道Javascript”中有关var
和let
的讨论。
函数foo
使用带有let
的变量的块声明,函数bar
使用带有var
的普通声明。为了清楚起见,在此示例中,变量b
和c
实际上在相同的范围内可用,对吗?那么在这里展示foo
函数的意义是什么?
function foo() {
var a = 1;
if (a >= 1) {
let b = 2;
while (b < 5) {
let c = b*2;
b++;
console.log(a + b);
}
}
}
function bar() {
var a = 1;
if (a >= 1) {
var b = 2;
while (b < 5) {
var c = b*2;
b++;
console.log(a + b);
}
}
}
答案 0 :(得分:3)
在foo
函数中,b
变量在if
语句之外不可访问,并且c
变量在{{1}之外不可访问}。
其原因是while
声明的变量是块作用域的。
例如,以下let
将产生log(b)
:
b is undefined
答案 1 :(得分:0)
Var的范围是最近的 function 块,而let仅在最近的{...}对中可见。因此,在bar()中,可以在if语句之外使用b和c,因为它们“属于”整个函数。