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) 专享 尊重版权
   83   84   85   86   87   88   89   90   91   92   93