一、let与var在块级作用域中的区别
ES6 新增了let命令,用来声明变量。它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效。
例如:
输出
在for循环中也是如此,用var声明的计数器a在全局都有效,用let声明的计数器a中在只在循环体内有效;
另外,for循环还有一个特别之处,就是设置循环变量的那部分是一个父作用域,而循环体内部是一个单独的子作用域。
只输出了4次3
也就是说这表明函数内部的变量i与循环变量i不在同一个作用域,有各自单独的作用域。
二、let不存在变量提升
在ES5中var是存在变量提升的,例如
输出undefined
如果用let的话就会报错
暂时性死区:
在代码块内,使用let命令声明变量之前,该变量都是不可用的,参考阮一峰老师的解释
三、let不允许在作用域中声明同个变量
文章总结自阮一峰老师的ES6入门