新增let命令:同var一样是用来声明变量的,区别在let只在所在代码块内有效。如图,let声明的a没有定义,var声明的b会输出1

Paste_Image.png
应用在for循环中,循环体内有效,循环体外报错

Paste_Image.png
注意:for循环的循环语句部分是一个父作用域,循环体内是单独的子作用域,父作用域和子作用域是分离的
不存在变量提升

var声明之前可以调用undifined,在let声明之前如果调用会报错
暂时性死区

Paste_Image.png
在代码块内let声明变量之前,该变量是不可用的,这在语法上叫暂时性死区
这意味着typeof不再是百分之百操作

Paste_Image.png

Paste_Image.png
如上图所示,声明变量之前用typeof会报错ReferenceError,如果没有声明用typeof反而不报错,
不允许重复声明
let不允许在相同作用域内重复声明同一个变量

Paste_Image.png
因此不能在函数内部重新声明变量。
下面给大家留一个思考题为什么报错

Paste_Image.png
欢迎评论回答问题!
摘抄于阮一峰老师的《ECMAScript 6 入门》(http://es6.ruanyifeng.com/)