let命令(es6中新增)
1.let声明的变量,只在let命令所在的代码块中有效
2.只能声明后使用,不能变量提升
3.暂时性死区(temporal dead zone,简称 TDZ):只要块级作用域内声明了let变量,那它就锁定了这个区,不受外界影响。例如有个全局变量var temp="abc" 然后在块级作用域内let也声明了一个temp,导致后者绑定了这个作用域,所以在这个作用域内在let temp之前赋值会报错
4.不允许重复声明变量,不能在相同作用域内重复声明变量,例如一个作用域内声明 var a=“1” let a="2" 是错的,同样如果一个作用域内声明 let a="3" let a="4" 也是错的
const命令
1.const 声明常量,常量声明后不可变,这意味着,声明的时候就要初始化,不能留到后面赋值。
2.const作用域和let一样,只在声明所在的区块内有效。
3.const常量也是不可以提升的,同样存在暂时性死区,只能在声明位置之后使用。
4.const声明的常量和let一样不可以重复声明。
var命令
1.存在变量提升的现象,在声明之前可以使用,值为undefined 不报错。例如:console.log(foo) 输出undefined 然后再声明并赋值 foo="abc" 这种现象是奇怪的,所以出现了let来纠正它