美文网首页
ES6-let和var区别

ES6-let和var区别

作者: div式人格 | 来源:发表于2022-06-22 20:23 被阅读0次

1.变量的声明

ES6 新增了 let 命令,用来声明变量。它的用法类似于 var,但是所声明的变量,只在 let 命令所在的代码块内有效。

1. 变量名不能重复
  • let 声明的变量,变量名不能重复! 而且必须先声明后使用。
  • 换句话说,let 没有变量的提升 和 变量的污染。
    var a = 0;
    let a = 1;  // 报错 --- 标识符 'a' 已经声明
    console.log(a);
2. 块级作用域
  • 块级作用域,相当于局部作用域。
  • 在JS中,只有函数才能创造一个局部作用域,
  • 但是在ES6中,只要是个 { } 都是块级作用域(局部作用域)。
    // 对象:
     {
         var a = 1;
         let b = 2;
     }
     console.log(a);  // a = 1    
     console.log(b);  // 报错 --- b is not defined
  
    // 在 js 中函数创造局部环境 
    for (var i = 0; i < 10; i++) {
        var a = i;
    }
    console.log(i);     // 10
    console.log(a);     // 9

    // es6 中 用 let 在 for 中声明的变量 ,无法在外部访问。
    for (let i = 0; i < 10; i++) {
        let a = i;
    }
    console.log(i);     // i is not defined
    console.log(a);     // i is not defined
3. let 声明的变量只能在当前作用域使用
  • js5 中 用 var 在 for 中声明的变量,可以再外部访问。
  • es6中 用 let 在 for 中声明的变量 ,无法在外部访问。
  • 在 js 中,全局变量可以在局部环境下使用,局部变量不能在全局下使用。
  • 在 es6 中,let 声明的变量,全局变量只能在全局使用,局部变量只能在局部使用。
    而且全局声明的变量与局部声明的变量没有任何关系, 变量名都可以一样。
    let a = 0;  // 全局作用域
    {
        // console.log(a);   // 报错 --- 在初始化之前无法访问'a'  应该先声明后使用。
        let a = 1;           // 局部作用域
        console.log(a);      //  1
        {
            let a = 2;        // 局部作用域
            console.log(a);   // 2
        }
    }
    console.log(a);  // 0
4. 暂时性死区
  • 如果区块中存在 let 和 const 命令,这个区块对这些命令声明的变量,从一开始就形成了封闭作用域。凡是在声明之前就使用这些变量,就会报错。
  • 总之,在代码块内,使用 let 命令声明变量之前,该变量都是不可用的。这在语法上,称为“暂时性死区”
    {
        console.log(a);   // 报错 --- 在初始化之前无法访问'a'     应该先声明后使用。
        let a = 1;        // 局部作用域
        console.log(a);   // 1

2. const

1.const关键字
  • 在ES6中用来声明静态常量。
  • 常量在声明时,所有字母必须大写, 必须赋值。
  • 一旦声明,常量的值就不能改变。
    const PI = 3.1415926;
    console.log(PI);
    PI = 0; 
    console.log(PI);    // 报错 --- 常量无法修改,  对常数变量的赋值。
    const ABC;
    console.log(ABC);   // 报错 --- 在const声明中缺少初始化格       
2. const 在作用域特性上与 let 完全一致

3. 总结:

相同点:
1. const 的作用域与 let 命令相同:只在声明所在的块级作用域内有效。
2. const 与 let 都 没有提升和污染(变量 / 常量)。
3. const 与 let 都 存在暂时性死区。
4. const 与 let 都 只能在声明的位置后面使用。
5. const 与 let 都 不可重复声明。

区别:
let => 变量:值可以改变。
const => 常量: 一旦声明,变量值不可更改。

相关文章

网友评论

      本文标题:ES6-let和var区别

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