提供了块级作用域。
|
|
无暂时性提升,形成死区
let声明的变量,在声明前使用会报错,而不是像var
一样得到undefined
1234567// var 的情况console.log(foo); // 输出undefinedvar foo = 2;// let 的情况console.log(bar); // 报错ReferenceErrorlet bar = 2;
当外层和内层定义同名变量,在内层变量声明前调用该变量同样报错123456var tmp = 123;if (true) { tmp = 'abc'; // ReferenceError let tmp;}
重复声明报错
同一个块级作用域内,使用let
和const
声明一个已存在的变量(无论第一次是如何声明的),报错
函数声明
ES6允许在块级作用域声明函数,但是为了兼容性,浏览器行为与规范有所不同
ES6:函数具有块级作用域
ES5(浏览器行为):函数提升到函数作用域最前。
使用函数赋值语句避免不同的行为差异