let命令
-
用于声明变量,但是声明的变量只能在let命令所在的代码块内有效,
{ let a = 10; var b = 1; }
其中,a在代码块的外部是调用不到的。对于for循环的计数器里面,就很适合let命令。
-
不存在变量声明
let不像var一样有变量声明,所以变量一定要在声明后使用。 -
暂时性死区
只要块级作用域内存在let命令,它所声明的变量就“绑定”这个区域,不再受外境影响。var tmp = 123; if(ture){ tmp = "axs";//error let tmp; } 在代码内,使用let命令声明变量之前,该变量都是不可用的。这在语法上称为“暂时性死区”。es6这样规定,主要是为了减少运行时错误,防止在变量声明前使用这个变量,从而导致意料之外的行为。暂时性死区的本质就是,只要进入当前作用域,所要使用的变量就已经存在,但是不可获取,只有等到声明变量的那一行代码出现,才可以获取和使用变量。
-
不允许重复声明
let不允许在相同的作用域内重复声明同一个变量。
块级作用域
-
es5只有全局作用域和函数作用域,没有块级作用域,这带来了很多不合理的场景。如:内层变量可能会覆盖外层变量;用来计数的循环变量会泄露为全局变量。
function fl(){ let n = 5; if(ture){ let n = 10; } console.log(n);//5 }
如果使用var,则会输出10。除此之外,es6还允许块级作用域任意嵌套。
const命令
const用来声明常量,一旦声明,他的值就不可以改变。而且,一旦声明,就必须立即被初始化,不能留到后面去赋值。他的作用域也只能在声明所在的块级作用域内有效。没有变量提升,同样存在暂时性死区,只能在声明后使用。
补充:跨模块常量:采用下面下法:
export const A=1