Page 78 - 你不知道的JavaScript(上卷)
P. 78
启设置项,这样就会生成标准的 ES6 代码。
更重要的,你甚至可以使用尚未成为 ES 官方标准的、更加好用的显式 let 声明。
B.3 性能
最后简单地看一下 try/catch 带来的性能问题,并尝试回答“为什么不直接使用 IIFE 来创
建作用域”这个问题。
首先,try/catch 的性能的确很糟糕,但技术层面上没有合理的理由来说明 try/catch 必
须这么慢,或者会一直慢下去。自从 TC39 支持在 ES6 的转换器中使用 try/catch 后,
Traceur 团队已经要求 Chrome 对 try/catch 的性能进行改进,他们显然有很充分的动机来
做这件事情。
其次,IIFE 和 try/catch 并不是完全等价的,因为如果将一段代码中的任意一部分拿出来
用函数进行包裹,会改变这段代码的含义,其中的 this、return、break 和 contine 都会
发生变化。IIFE 并不是一个普适的解决方案,它只适合在某些情况下进行手动操作。
最后问题就变成了:你是否想要块作用域?如果你想要,这些工具就可以帮助你。如果不
想要,继续使用 var 来写代码就好了!
块作用域的替代方案 | 63