现在ES6一共有6中变量声明方式:var、function、const、let、import、class 。
简谈其中两个关键字:let和const,在没有这两个关键字之前,JavaScript在变量赋值方面总会有一些合法但确奇怪的现象。也就是常说的变量提升问题。
三者的区别:
var: 会造成变量声明提升,声明的全局变量会与widows绑定,可以声明一个或多个变量,会造成溢出问题(例如:循环溢出),并且在函数内部没有使用var关键字声明变量,则该变量会自动成为全局变量。
let:不会造成变量提升问题,声明的全局变量不会与windows绑定,不可以重复声明同一个变量,不会造成溢出问题,它的作用域是块级作用域,并且不会受作用域外的影响(块级作用域就是一对{})。
const:不会造成变量提升问题,声明的全局变量不会与windows绑定,不可以重复声明同一个变量并且只能声明一个值后面不会发生变化(即变量初始化),不适用于循环(除非循环所要的变量值不变),常用于声明对象。它的作用域也是块级作用域,并且不会受作用域外的影响。
使用优先级:const优先、let次之、var最后
解构赋值:
ES6中允许按照一定的模式,从数组或者对象中提取值,对变量进行赋值。
注意:只要等号右边的值不是对象或数组,就先将其转为对象。其中对象解构:属性名必须等于变量名。