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

问题描述 投票:11回答:2

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

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

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

javascript backwards-compatibility polyfills
2个回答
8
投票

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

您可能知道,let是ECMAscript Next / Harmony的一部分,充其量只是在某些浏览器中作为实验性功能提供的。即使let是一个非常稳定的特征,ES.Next规范仍然在变化。去玩它,但依靠itho真的没有意义。


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兼容代码。

© www.soinside.com 2019 - 2024. All rights reserved.