ES6新增的声明方式
ES6新增了变量的声明方式、解构赋值、模板字符串、简化对象写法、箭头函数、函数形参默认值、rest参数、拓展运算符、新增数据类型(Set、Map、Symbol、BigInt)、promise、async/await
let、const、var的区别
区别主要体现在七个方面

(1)是否有块级作用域
块作用域由 { }包括,let和const具有块级作用域,var不存在块级作用域。
块级作用域解决了ES5中的两个问题:
内层变量可能覆盖外层变量
用来计数的循环变量泄露为全局变量
(2)是否存在变量提升
var存在变量提升
let、const不存在变量提升,即变量只能在声明之后使用,否则会报错
(3)是否添加全局属性
浏览器的全局对象是window,Node的全局对象是global。var声明的变量为全局变量,并且会将该变量添加为全局对象的属性,但是let和const不会。
(4)能否重复声明变量
var可以重复声明变量,后声明的同名变量会覆盖之前声明的变量
const和let不允许重复声明变量
(5)是否存在暂时性死区
在使用let、const命令声明变量之前,该变量都是不可用的。这在语法上,称为暂时性死区 let a = a/const a = a(会报错)
使用var声明的变量不存在暂时性死区:var a = a(不会报错)
(6)是否必须设置初始值
var和let不需要赋初始值,只声明就可以
const声明时必须赋初始值,否则会报错
(7)能否改变指针指向(重复赋值)
var、let创建的变量是可以更改指针指向(可以重新赋值)
const声明的变量是不允许改变指针的指向
注意
1.const块级作用域:在{}【不包括函数】,如if、else if {}、else{},for(){}中用const声明的变量外面访问不到,而var可以
2.const保证的并不是变量的值不能改动,而是变量指向的那个内存地址不能改动。对于基本类型的数据(数值、字符串、布尔值),其值就保存在变量指向的那个内存地址,因此等同于常量;但对于引用类型的数据(主要是对象和数组)来说,变量指向数据的内存地址,保存的只是一个指针,const只能保证这个指针是固定不变的,至于它指向的数据结构是不是可变的,就完全不能控制了。

浙公网安备 33010602011771号