let、var、const区别

178 阅读2分钟

let var const 区别

d2aba2e0-50f7-11eb-85f6-6fac77c0c9b3.png var声明是全局作用域或函数作用域,而let和const是块级作用域。var变量可以在其范围内更新和重新声明,let变量可以被更新但不能重新声明,const既不能更新也不能重新声明

var声明的变量会挂载到window上,let和const声明的变量不会

  var a=10;
  console.log(a,window.a);//10 10  
  let b=10;
  console.log(b,window.b);//10 undefined  
  const c=10;
  console.log(c,window.c);//10 undefined

var声明变量存在变量提升,let和const不存在变量提升

 console.log(a); //undefined 声明未赋值 默认undefined
 var a=100;  
 console.log(b);//报错 Cannot access 'b' before initialization
 let b=10;  
 console.log(c);//报错 Cannot access 'c' before initialization
 const c=10

let和const声明形成块级作用域

 if (true) {
    var a=100;
    let b=200;
 }
 console.log(a);//100
 console.log(b);//报错 b is not defined  
 if (true) {
    var c=1;
    const d=2;
}
console.log(c);//1
console.log(d);//报错 d is not defined

同一作用域下let和const不能够声明同名变量,var可以

 var a=10;
 var a=100;
 console.log(a);//100 后面的会覆盖前面的  
 let a=10;
 let a=100;
 console.log(a);//报错 Identifier 'a' has already been declared====a已经声明过了  
 const a=10;
 const a=100;
 console.log(a);//报错 Identifier 'a' has already been declared ===a声明过了

修改声明的变量

let和var可以
const声明一个只读的常量,一旦声明,不可改变

    var a=10;
    a=20;
    console.log(a);//20  
    let a=10;
    a=20;
    console.log(a);//20  
    const a=10;
    a=20;
    console.log(a);//报错 Assignment to constant variable

在函数中使用var声明变量的时候,该变量是局部的

    var a=10;
    function change(){
        var a=20;
    }
    change()
    console.log(a);//10

而如果在函数内不使用var,该变量是全局的

    var a=10;
    function change(){
        a=20;
    }
    change()
    console.log(a);//20

区别

  1. let可以先声明再复制,而const在声明之后必须马上赋值,否则会报错。
  2. const简单的类型一旦声明不能再修改,复杂的类型(数组、对象等)指针指向的地址不能修改,内部的数据可以修改。
  3. var声明的范围是函数作用域,let和const声明的范围是块级作用域。
  4. .var声明的变量会被提升到函数作用域的顶部,let和const声明的变量不存在提升,并且具有暂时性死区。
  5. var允许在同一作用域中重复声明同一个变量,let和const不允许。
  6. 在全局作用域中使用var声明的变量会成为window对象的属性,let和const声明的变量则不会。
  7. const的行为与let基本相同,但是,使用const声明的变量必须进行初始化,并且不能被修改。 完结