es6之 let、var 、const的区别

es6语法有很多新增,从最简单最常用的let const var的区别来说把!

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

var a = 1;
console.log(a,window.a);    // 1  1

let b = 2;
console.log(b,window.b);    // 2 undefined

const c = 3;
console.log(c,window.c);    // 3 undefined

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

console.log(a); // undefined  ===>  a已声明还没赋值,默认得到undefined值
var a = 10;
console.log(b); // 报错:b is not defined  ===> 找不到b这个变量
let b = 10;
console.log(c); // 报错:c is not defined  ===> 找不到c这个变量
const c = 10;

3、let和const声明形成块作用域

if(1){
    var a = 1;
    let b = 10;或者const c = 20;
}

console.log(a); // 1
console.log(b)  // 报错:b is not defined  ===> 找不到b这个变量
console.log(c)  // 报错:c is not defined  ===> 找不到c这个变量

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

var a = 1;
console.log(a); // 1
var a = 10;
console.log(a); // 10

let a = 1;
let a = 10;
//  控制台报错:Identifier 'a' has already been declared   标识符a已经被声明了。

5、let、const会暂存死区 (原因:1、全局变量和局部变量同时存在,局部变量优先。2、没有变量提升) var不会

var a = 100;
    if(true){
      a = 90;
      let a = 99;
      console.log(a); // Cannot access 'a' before initialization 不能在初始化之前访问“a”
    }

6、const

  • 1、一旦声明必须赋值,不能使用null占位。

  • 2、声明后不能再修改

  • 3、如果声明的是复合类型数据,可以修改其属性

const list = [];
list[0] = 'a';
console.log(list);  // ['a']

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