Javascript var与let的区别
我刚刚读了Kyle Simpsons《你不懂Javascript》中关于Javascript var与let的区别,javascript,var,let,Javascript,Var,Let,我刚刚读了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) {
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(){
var a=1;
如果(a>=1){
设b=2;
而(b<5){
设c=b*2;
b++;
控制台日志(a+b);
}
}
}
功能条(){
var a=1;
如果(a>=1){
var b=2;
而(b<5){
var c=b*2;
b++;
控制台日志(a+b);
}
}
}
在foo
函数中,b
变量在if
语句之外不可访问,而c
变量在while
之外不可访问
原因是让
声明的变量是块范围的
例如,以下log(b)
将导致b未定义
:
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);
}
函数foo(){
var a=1;
如果(a>=1){
设b=2;
而(b<5){
设c=b*2;
b++;
控制台日志(a+b);
}
}
控制台日志(b);
}
在foo
函数中,b
变量在if
语句之外不可访问,而c
变量在while
之外不可访问
原因是让
声明的变量是块范围的
例如,以下log(b)
将导致b未定义
:
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);
}
函数foo(){
var a=1;
如果(a>=1){
设b=2;
而(b<5){
设c=b*2;
b++;
控制台日志(a+b);
}
}
控制台日志(b);
}
Var的作用域是最近的函数块,而let仅在最近的{…}对中可见。因此,在bar()中,可以在if语句之外使用b和c,因为它们“属于”整个函数。Var的作用域是最近的函数块,而let仅在最近的{…}对中可见。因此,在bar()中,可以在if语句之外使用b和c,因为它们“属于”整个函数。示例前面的语句说“除了一些细微的细节,作用域规则的行为与我们刚才在函数中看到的大致相同:”。听起来他只是在重复这个例子。在bar
b中,if语句之外有可能是重复的而不是重复的,因为我理解其中的区别。在阅读了答案之后,我了解到我对let
的解释是假设一个变量只对声明的作用域可用,没有内部作用域。示例前面的语句说“除了一些细微的细节,作用域规则的行为与我们刚才看到的函数大致相同:”。听起来他只是在重复这个例子。在bar
b中,if语句之外有可能是重复的而不是重复的,因为我理解其中的区别。在阅读了答案之后,我明白了我对let的解释是假设一个变量只对声明的作用域可用,没有内部作用域。好的,这很好。在文本(内部/较低范围)的上下文中,我有点困惑,其中使用let
声明的变量仍然可用于声明范围的内部范围。我把let
理解为只声明当前作用域,没有内部作用域。好的,这很好。在文本(内部/较低范围)的上下文中,我有点困惑,其中使用let
声明的变量仍然可用于声明范围的内部范围。我把let
理解为只声明当前作用域,而不声明内部作用域。