零、块级作用域
在学习 let 和 const 之前,我们不得不谈一谈 ES5 的块级作用域,理解为什么要在 ES6 引入 let 和 const 。
我们都知道:通过 var 声明的变量存在变量提升的特性。 看看下面的示例代码:
if (condition) {
var value = 1;
}
console.log(value);
我们可能会觉得只有 condition 为 true 的时候,才会创建 value,如果 condition 为 false,程序就不会走到 if 里面,结果是程序报错:ReferenceError: value is not defined 。
但是,因为变量提升的原因,实际代码相当于:
var value;
if (condition) {
value = 1;
}
console.log(value);
如果 condition 为 false ,结果会是 undefined。
除此之外,在 for 循环中:
function test() {
for (var i = 0; i < 3; i++) {
//...
}
console.log(i);
}
test();
即便循环已经结束了,我们依然可以访问 i 的值。
为了加强对变量生命周期的控制,ECMAScript 6 引入了块级作用域。
块级作用域存在于:
- 函数内部
- 块中(字符 { 和 } 之间的区域)