在浏览器兼容性方面使用javascript中的“let”?

时间:2012-11-27 09:55:07

标签: javascript backwards-compatibility polyfills

在javascript中使用let关键字有哪些选项?看起来它真的很有用。

我见过traceur,但我想知道是否还有其他选项,所以我不必通过它运行整个项目。

甚至可以使用某种类型的polyfill或库。或者我基本上必须等到所有旧浏览器消失才能原生使用它...

2 个答案:

答案 0 :(得分:21)

让我引用我刚才读到的 You Don't Know JS: Scope & Closures - Appendix B: Polyfilling Block Scope

PS:这是根据Creative Commons CC BY-NC-ND 3.0许可的,因此只要提及参考,就可以分享

未来大报:

考虑以下示例

{
 let a = 2;
 console.log( a ); // 2
}

console.log( a ); // ReferenceError

这在ES6环境中非常有用。但是我们可以在ES6之前这样做吗?赶上是答案。

try{throw 2}catch(a){
 console.log( a ); // 2
}
console.log( a ); // ReferenceError

哇!这是一些丑陋,怪异的代码。我们看到一个try / catch似乎强行抛出一个错误,但它抛出的“错误”只是一个值2,然后接收它的变量声明在catch(a)子句中。介意:吹了。

这是正确的,catch子句具有块范围,这意味着它可以在ES6之前的环境中用作块填充的polyfill。

“但......”,你说。 “......没有人愿意像那样编写难看的代码!”确实如此。没有人写过(某些)CoffeeScript编译器输出的代码。这不是重点。

关键是工具可以将ES6代码转换为在ES6之前的环境中工作。您可以使用块范围编写代码,并从这些功能中受益,并让构建步骤工具负责生成在部署时实际工作的代码。

这实际上是所有(大多数)ES6的首选迁移路径:在从ES6之前到ES6的过渡期间,使用代码转换器来获取ES6代码并生成与ES5兼容的代码。

答案 1 :(得分:8)

绝对没有办法来模仿/填充ECMAscript中的关键字。所以你要么选择完全使用它(目前可能是一个非常糟糕的主意),或者你还不能使用它。

正如您所知,let ECMAscript Next / Harmony 的一部分,充其量只是实验性功能在某些浏览器中。即使let是一个非常稳定的功能, ES.Next 规范仍然处于不稳定状态。去玩它,但依靠它真的没有意义 imho