9.2 通过 let
和 const
实现块级作用域
let
和 const
创建的变量都是块级作用域:它们只存在于包围它们的最深的代码块中。以下的代码表明了 let
声明的变量 tmp
仅仅存在于 if
声明内部。
function func() {
if (true) {
let tmp = 123;
}
console.log(tmp); // ReferenceError: tmp is not defined
}
相比之下,var
声明的变量是函数域:
function func() {
if (true) {
var tmp = 123;
}
console.log(tmp); // 123
}
块级作用域意味着你能在函数中重复声明变量(shadow variables):
function func() {
let foo = 5;
if (···) {
let foo = 10; // shadows outer `foo`
console.log(foo); // 10
}
console.log(foo); // 5
}