美文网首页
谈谈ES6的let和const

谈谈ES6的let和const

作者: 明人不放按屁 | 来源:发表于2019-11-20 10:39 被阅读0次

    在js中,变量只有两种,全局变量和局部变量,但是之前的版本并没有‘块级作用域‘这个说法,‘块级作用域’即所在的代码块 {} 内有效。例如:

    { 
        var x = 2; 
    }
    console.log(x) // 输出2
    
    var x = 10;
    { 
        var x = 2;
    }
    console.log(x)  // 输出  2
    

    但是ES6中增加了let关键字,使用let可以实现‘块级作用域’,例如:

    { 
        let x = 2;
    }
    console.log(x)  //报错, x is not defined
    
    var x = 10;
    { 
        let x = 2;
    }
    console.log(x)// 输出 10
    

    注意:在相同的作用域或块级作用域中,不能使用 let 关键字来重置 var 关键字声明的变量,也不能使用 const 关键字来重置 var 和 let关键字声明的变量
    例如:

    var x = 2;       // 合法
    let x = 3;       // 不合法
    
    {
        var x = 4;   // 合法
        let x = 5   // 不合法
    }
    
    //同样的
    let x = 10;
    { 
        var x = 2;
    }
    console.log(x)// 输出 报错
    
    
    
    var x = 2;         // 合法
    const x = 2;       // 不合法
    {
        let x = 2;     // 合法
        const x = 2;   // 不合法
    }
    

    另外,不仅仅在说明变量的时候var和let有区别,在循环作用域中,两者也有不同。在for循环中,var依然没有‘块级作用域’这个

    //使用var
    var i = 5;
    for (var i = 0; i < 10; i++) {
        console.log(i);//0.1.2.3...9
    }
    console.log(i);//10
    
    //使用let
    let i = 5;
    for (let i = 0; i < 10; i++) {
        console.log(i);//0.1.2.3...9
    }
    console.log(i);//5
    

    在第一个实例中,使用了 var 关键字,它声明的变量是全局的,包括循环体内与循环体外。
    在第二个实例中,使用 let 关键字, 它声明的变量作用域只在循环体内,循环体外的变量不受影响。

    ES6除了增加变量关键字let以外,还增加了常量关键字const,用于声明一个或多个常量,声明时必须进行初始化,且初始化后值不可再修改:

    const PI = 3.141592653589793;
    PI = 3.14;      // 报错
    
    
    var x = 10;
    { 
        const x = 2;
       console.log(x) //  2
    }
    console.log(x)//  10
    

    但是const 定义的变量并非常量,并非不可变,使用 const 定义的对象或者数组,其实是可变的。例如:

    // 创建常量对象
    const car = {type:"Fiat", model:"500", color:"white"};
    
    // 修改属性:
    car.color = "red";
    console.log(car.color)//red
    

    但是我们不能对常量数组重新赋值:

    const cars = ["Saab", "Volvo", "BMW"];
    cars = ["Toyota", "Volvo", "Audi"];    // 错误
    

    相关文章

      网友评论

          本文标题:谈谈ES6的let和const

          本文链接:https://www.haomeiwen.com/subject/knnnictx.html