Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript var与let的区别_Javascript_Var_Let - Fatal编程技术网

Javascript var与let的区别

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) {

我刚刚读了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); 
        }
    }   
}
函数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
理解为只声明当前作用域,而不声明内部作用域。