ES6 新增加了两个重要的JavaScript 关键字: letconst
    let 声明的变量只在let 命令所在的代码块内有效。
    const 声明一个只读的常量,一旦声明,常量的值就不能改变。
    在ES6 之前,JavaScript 只有两种作用域: 全局变量 与 函数内的局部变量。
    全局变量

    1. <script type="text/javascript">
    2. var carName = "Volvo";
    3. console.log(carName);
    4. // 这里可以使用 carName 变量
    5. function myFunction() {
    6. // 这里也可以使用 carName 变量
    7. console.log(carName)
    8. };
    9. myFunction()
    10. </script>

    结果:
    Volvo
    Volvo

    局部变量

    <script type="text/javascript">
    
            function myFunction() {
                var carName = "华为"
                // 这里也可以使用 carName 变量
                console.log(carName)
            };
            myFunction()
    
            console.log(carName);
            // 这里可以使用 carName 变量
    
            </script>
    

    结果:
    华为
    index.html:18 Uncaught ReferenceError: carName is not defined
    at index.html:18

    JavaScript 块级作用域(Block Scope)
    使用var 关键字声明的变量不具备块级作用域的特性,它在 {} 外依然能被访问到。

        <script type="text/javascript">
            { 
                var x = 2; 
            }
            // 这里可以使用 x 变量
            console.log(x)  
    
            </script>
    

    在ES6 之前,是没有块级作用域的概念的。
    ES6 可以使用let 关键字来实现块级作用域。
    let 声明的变量只在let 命令所在的代码块 {} 内有效,在 {} 之外不能访问

    var x = 10;
                // 这里输出 x 为 10
                { 
                    var x = 2;
                    // 这里输出 x 为 2
                }
                // 这里输出 x 为 2
    

    let 关键字就可以解决这个问题,因为它只在let 命令所在的代码块 {} 内有效。

    var x = 10;
    // 这里输出 x 为 10
    { 
        let x = 2;
        // 这里输出 x 为 2
    }
    // 这里输出 x 为 10
    

    const

    <script type="text/javascript">
                const  x = 10;
                x = 100
                document.write(x)
    
            </script>
    

    如上我们会发现报错

    index.html:11 Uncaught TypeError: Assignment to constant variable.
    at index.html:11