let var const的区别

1. ES6

  • var:在ES6出来之前,声明变量都只能使用var关键字
  • letconst都是ES6出来的新语法

2. 变量提升

  • var会进行变量提升
    console.log(a) //undefined
    var a = 1
    
    letconst这么打印的时候,会报错。
  • letconst 不能变量提升
    console.log(b) //报错: b is not defined
    let b = 2
    
    报错: b is not defined
    console.log(c) //报错: c is not defined
    let c = 3
    
    报错: c is not defined

3. 作用域

  • var 是全局变量。
    function fn(){
      if(true){
        console.log(a)
      }else{
        var a = 1
        console.log(2)
      }
    }
    fn() // undefined
    
    这段代码打印出来的事undefined,变量a会提升到if的上面去
  • constlet 都是块级局部变量。
    {
      let a
    }
    console.log(a) //undefined
    
    打印出来是undefined
    {
      const a =1
    }
    console.log(a) //undefined
    
    打印出来也是undefined

4. 申明赋值

  • varlet 都不需要在申明的同时赋值
    var a 
    console.log(a) //undefined
    
    let b
    console.log(b) //undefined
    
    打印出来的都是undefined
  • const 必须在声明的同时赋值,不然就会报错
    const a
    

    编译器就会报错:

    控制台报错:

    SyntaxError: Missing initializer in const declaration
    

5. 赋值更改

  • varlet都可以在作用域内改变声明的变量的值
    var a = 1
    a = 2
    console.log(a) //2
    
    打印出来的是2。
    let b = 1
    b = 2
    console.log(b) //2
    
    打印出来的是2。
  • const声明的变量在作用域内,基本数据类型赋值不能更改。如果是复杂类型,就可以修改。
    const c = 1
    c = 2
    
    编译器报错:
    Attempt to assign to const or only variable
    
    控制台报错:
    TypeError: Assignment to constant variable.
    

6. 同名变量

  • var 可以声明同名变量
    var a = 1
    var a = 2
    console.log(a) //2
    
    声明并赋值成功,打印出来的是2。
  • letconst在作用域内不能声明同名变量
    const a = 1
    const a = 2
    
    报错:
    SyntaxError: Identifier 'a' has already been declared
    

你可能感兴趣的:(let var const的区别)