es6中let const和var的区别

let,const 和var的区别

由于ES6的出现,变量声明不再单调,除了可以用var外,还可以使用let和const。这下来看看它们之间的区别。

  1. 变量提升问题
     console.log(a); //undefined
     var a = 1
     console.log(b);// Cannot access 'b' before initialization
     let b = 1
     console.log(c);
     const c = 1 //Cannot access 'c' before initialization
    
    • 通过以上代码可以看出var声明的变量a,有变量提升,报错显示a声明了但是没有赋值,默认undefined
    • 通过let和const分别声明的变量b和c,报错显示无法在初始化之前访问
  2. 作用域问题
    • 由于es5没有块级作用域的概念,所以var肯定也没有作用域的影响,但是let和const只在当前作用域起作用
    {
        var a = 1;
        let b = 2;
        const c = 3
    }
    console.log(a);//1
    console.log(b);//Cannot access 'b' before initialization
    console.log(c);//Cannot access 'c' before initialization
    
    • 看上面代码中,使用let和const声明的变量报错,var声明的返回正确的值,这说明,let声明的变量只在它所在的代码块有效。
  3. 能否重复声明
    • 同一作用域下var可以重复声明变量,但是let和const不可以,看下面代码
    //同一作用域不可以重复声明
    var a = 1
    console.log(a);//1
    var a = 2
    console.log(a);//2
    let b = 3
    let b = 4//Uncaught SyntaxError: Identifier 'b' has already been declared
    
    //不同作用域可以
    {
        let a = 1
        console.log(a);//1
    }
    let a = 2
    console.log(a);//2
    
    • 同一作用域之下用let再次声明变量b报错,变量b已经声明,但是不同作用域下就可以重复声明
  4. const声明的注意事项
    • 首先const在声明变量的同时必须赋值
    • const声明的是一个常量,声明之后不可以修改
    const a//Uncaught SyntaxError: Missing initializer in const declaration
    const a = 1
    console.log(a);//1
    a = 2//Uncaught TypeError: Assignment to constant variable.
    
    • 看上面代码声明a的时候没有赋值,报错声明变量的时候没有初始化
    • 声明a并赋值为1之后,再赋值a为2时,报错给一个常量赋值了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值