let
在 javascript中使用关键字的选项有哪些。好像真的很有用。
我见过traceur,但我想知道是否还有其他选择,所以我不必通过它运行整个项目。
是否有可能使用某种类型的 polyfill 或库。还是我基本上必须等到所有旧浏览器都消失才能原生使用它...
let
在 javascript中使用关键字的选项有哪些。好像真的很有用。
我见过traceur,但我想知道是否还有其他选择,所以我不必通过它运行整个项目。
是否有可能使用某种类型的 polyfill 或库。还是我基本上必须等到所有旧浏览器都消失才能原生使用它...
让我引用我刚刚在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 兼容的代码。
绝对没有办法在 ECMAscript 中模仿/填充关键字。因此,您要么选择完全使用它(目前这可能是一个非常糟糕的主意),要么您还不能使用它。
您可能知道,let
它是ECMAscript Next / Harmony的一部分,充其量只是在某些浏览器中作为实验性功能提供。即使let
是一个非常稳定的特性,ES.Next规范仍然在不断变化。去玩它,但依靠它真的没有意义恕我直言。