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']