ES6中新增两个声明变量的关键字:let const。
是否存在块级作用域:
首先,通过var定义的变量,作用域是整个封闭函数,是全局的。
而通过let定义的变量,作用域是在块级或子块中,是块级的。
是否存在变量提升:
通过var定义的变量,存在变量提升的问题。即浏览器在运行代码之前会进行预解析,不论var声明的变量处于当前作用域的哪个位置,都会提升到作用域的头部。
而通过let和const定义的变量,不存在变量提升。在具体的代码书写中,要根据具体需求谨慎选择使用var let const。
是否允许重复声明:
通过var定义的变量,可以重复声明,同一变量中,后赋值的变量会替换掉前者。不会出现代码运行错误。
let和const不允许重复声明。语法规范,若重复声明(同一变量反复赋值),代码运行会报错。
另外,const表示常量,一旦确定就不能修改,只要声明就必须要赋值,(var和let可以只声明,不赋值。)const声明的变量名一般使用大写。
如果const保存的是复杂数据类型,本质上变量保存的是地址。只要地址不变,就不算修改。