var和let之间的区别

时间:2018-07-01 13:34:47

标签: javascript var let

我刚刚阅读了 Kyle Simpsons “您不知道Javascript”中有关varlet的讨论。

Chapter 2: Nested Scopes

函数foo使用带有let的变量的块声明,函数bar使用带有var的普通声明。为了清楚起见,在此示例中,变量bc实际上在相同的范围内可用,对吗?那么在这里展示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); 
        }
    }   
}

2 个答案:

答案 0 :(得分:3)

foo函数中,b变量在if语句之外不可访问,并且c变量在{{1}之外不可访问}。

其原因是while声明的变量是块作用域的。

例如,以下let将产生log(b)

b is undefined

答案 1 :(得分:0)

Var的范围是最近的 function 块,而let仅在最近的{...}对中可见。因此,在bar()中,可以在if语句之外使用b和c,因为它们“属于”整个函数。