在ES6之前,JavaScript中声明变量只有var,声明函数使用function。ES6后,声明的方式有var、let、const、function、class。
var声明的变量属于函数作用域,let和const声明的变量属于块级作用域;
var存在变量提升现象,let和const没有此现象(不能初始化,如果把const初始化为undefined,之后又赋值,就改变了const的引用),可以叫做暂时性死区(进行实例化时,let/const会被创建,但还未进行词法绑定,所以不能被访问);
var可以重复声明,let禁止重复声明变量,const创建一个值的只读引用(只是不能再被赋,不是不可被改变的,不能改变对内存地址的引用,指针不能变,指向的东西可以变);
let、const不会成为全局对象的属性。