var 和 let 的区别

Difference between var and let

我刚刚阅读了 Kyle Simpsons "You Dont Know 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); 
        }
    }   
}

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 语句之外使用 bc,因为它们“属于”整个函数。