> 文章列表 > es6笔记-let、const、var的区别

es6笔记-let、const、var的区别

es6笔记-let、const、var的区别

let、const、var的区别

  1. 变量提升

    • var 声明的变量存在变量提升,在声明前可以调用,直为undefind
      console.log(a);
      var a = 1;
      

      相当于:

      var a;
      console.log(a);
      a = 1;
      
    • let和const不存在变量提升,变量要在声明前调用,否则报错
      console.log(a); // 
      let a = 1;
      

      报错如下:
      es6笔记-let、const、var的区别

  2. 暂时性死区

    • var 不存在暂时性死区
    • let 和 const 存在暂时性死区,声明变量以后才可以获取和调用该变量
  3. 块级作用域

    • var 不存在块级作用域
      var bool = true;
      if(bool){let a = 1;console.log(a); // 1
      }
      console.log(a); // 1
      
    • let 和 const存在块级变量
      var bool = true;
      if(bool){let a = 1;console.log(a); // 1
      }
      console.log(a); // a is not defined
      
  4. 初始值设置

    • var 和 let 可以不设置初始值
      var a;
      let b;
      console.log(a); //undefined
      console.log(b); //undefined
      
    • const 声明变量必须设置初始值,不设置会报错
         	const c;console.log(c); 
      

      es6笔记-let、const、var的区别

  5. 重复声明

    • var 允许重复声明
      var a = 1;
      var a = 2;
      console.log(a); // 2
      
    • let和const不允许重复声明,会抛出 SyntaxError 的错误
      let a = 1;
      let a = 2;
      console.log(a);
      

    es6笔记-let、const、var的区别

  6. 数据修改

    • var 和 let 可以修改数据
    • const 定义的常量是基本数据类型,不能修改。定义的常量要是引用数据类型,就可以修改。因为保存在栈内存的数据是不可以被修改的。而基本数据类型是直接存储在栈内存中的,所以不能被修改。引用数据类型在栈内存中存储的是一个指针,真正的数据存储在指针指向的堆地址,不可被修改的是指针,真正的数据是可变的。
  7. 重新赋值

    • var 和 let 声明的变量都可以重新赋值
    • const 声明的是常量不能重新赋值

smoking info