var 和 let 的区别
Difference between var and let
我刚刚阅读了 Kyle Simpsons "You Dont Know 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);
}
}
}
在 foo
函数中,b
变量在 if
语句之外不可访问,并且 c
变量在 [= 语句之外不可访问15=].
原因是 let
声明的变量是块作用域的。
例如下面的 log(b)
将导致 b is undefined
:
function foo() {
var a = 1;
if (a >= 1) {
let b = 2;
while (b < 5) {
let c = b*2;
b++;
console.log(a + b);
}
}
console.log(b);
}
var
范围是最近的 function
块,而 let
仅在最近的 {...}
.
对中可见
因此,在 bar()
中,您可以在 if
语句之外使用 b
和 c
,因为它们“属于”整个函数。
我刚刚阅读了 Kyle Simpsons "You Dont Know 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);
}
}
}
在 foo
函数中,b
变量在 if
语句之外不可访问,并且 c
变量在 [= 语句之外不可访问15=].
原因是 let
声明的变量是块作用域的。
例如下面的 log(b)
将导致 b is undefined
:
function foo() {
var a = 1;
if (a >= 1) {
let b = 2;
while (b < 5) {
let c = b*2;
b++;
console.log(a + b);
}
}
console.log(b);
}
var
范围是最近的 function
块,而 let
仅在最近的 {...}
.
因此,在 bar()
中,您可以在 if
语句之外使用 b
和 c
,因为它们“属于”整个函数。