12

let在 javascript中使用关键字的选项有哪些。好像真的很有用。

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

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

4

2 回答 2

24

让我引用我刚刚在You Don't Know JS: Scope & Closures - 附录 B:Polyfilling Block Scope上读到的内容

PS:这是根据知识共享 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 的首选迁移路径:在从 pre-ES6 到 ES6 的过渡期间,使用代码转译器获取 ES6 代码并生成与 ES5 兼容的代码。

于 2014-06-05T12:27:42.403 回答
10

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

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

于 2012-11-27T10:04:39.707 回答