1.变量提升
在我们es5中没有let,const所以大家都用var来声明变量,用var声明变量有一特点,就是会有变量提升的情况.let和const声明的变量则不会出现这种情况,示例如下:
function foo(){
console.log(a)//undefined
var a = 2;
}
function foo2(){
console.log(a)//直接报错
let a = 2;
}
2.重复声明
用var来声明同一个变量时相当于二次赋值,let则会直接报错,示例如下:
var a = 1
var a = 2
console.log(a)//2
let b = 1
let b = 2
console.log(a)//报错
3.暂时性死区
暂时性死区的概念其实在变量提升中可以体现出,在使用let、const命令声明变量之前,该变量都是不可用的。这在语法上,称为暂时性死区。使用var声明的变量不存在暂时性死区。示例如下:
function foo2(){
console.log(a)//直接报错,在暂时性死区
let a = 2;
}
4.块级作用域
块作用域由 { }包括,let和const具有块级作用域,var不存在块级作用域。
所以let和const可以很好地解决变量污染的问题
5.const的初始值设置,与不能改变
- const相比较于let和var还有一个特性就是const在声明一个变量时必须给变量添加初始值,示例如下:
const a;//报语法错误
let b;//undefined
var c;//undefined
- const的另一特性就是const声明的是一个常量,常量不能改变
注意:const保证的并不是变量的值不能改动,而是变量指向的那个内存地址不能改动。当const声明的是一个应用型数据类型时,只是指针不能改变,至于它指向的数据结构是可以改变的