Page 88 - 你不知道的JavaScript(下卷)
P. 88
var a = 3;
console.log( a ); // 3
})();
console.log( a ); // 2
2.1.1 let 声明
但现在,我们可以创建绑定到任意块的声明,(不出意外地)其被称为块作用域(block
scoping)。这意味着我们只需要一对 { .. } 就可以创建一个作用域。不像使用 var 那样声
明的变量总是归属于包含函数(即全局,如果在最顶层的话)作用域,而是像下面这样使
用 let:
var a = 2;
{
let a = 3;
console.log( a ); // 3
}
console.log( a ); // 2
在 JavaScript 中使用独立的 { .. } 还不是很常见的惯用法,但总是合法的。如果开发者有
其他支持块作用域语言的经验,会很容易认出这种模式。
我认为这种使用一个专门的 { .. } 块的模式是创建块作用域变量的最好方法。另外,应该
总是把 let 声明放在块的最前面。如果有多个变量需要声明的话,建议只用一个 let。
从编码风格上来说,我甚至愿意把 let 和左括号 { 放在同一行,这样更明确地表明了这个
块的目的只是为了声明这些变量的作用域。
{ let a = 2, b, c;
// ..
}
这样看起来很奇怪,也不大可能符合其他大多数 ES6 文献中推荐的语法形式。但是我的疯
狂是有原因的。
let 声明还有一个试验性(未标准化的)的形式,称为 let 块,看起来就像这样:
let (a = 2, b, c) {
// ..
}
我把这种形式称为显式块作用域,而镜像于 var 的那种 let .. 声明形式更加隐式,因为它
某种程度上“劫持”了所在的 { .. } 中的一切。一般来说,开发者喜欢显式机制胜过隐式
机制,我认为这里也是这样。
语法 | 65
图灵社区会员 avilang(1985945885@qq.com) 专享 尊重版权