gki*_*ely 12 javascript backwards-compatibility polyfills
let在javascript中使用关键字有哪些选项?看起来它真的很有用.
我见过traceur,但我想知道是否有其他选项,所以我不必通过它运行整个项目.
甚至可以使用某种类型的polyfill或库.或者我基本上必须等到所有旧浏览器消失才能原生使用它...
Ahm*_*lfy 22
让我引用我刚刚读到的关于你不了解JS的内容:范围和闭包 - 附录B:填充块范围
PS:这是根据Creative Commons CC BY-NC-ND 3.0许可的,所以只要提到参考文献就可以共享它
请考虑以下示例
{
let a = 2;
console.log( a ); // 2
}
console.log( a ); // ReferenceError
Run Code Online (Sandbox Code Playgroud)
这在ES6环境中非常有用.但是我们可以在ES6之前这样做吗?抓住就是答案.
try{throw 2}catch(a){
console.log( a ); // 2
}
console.log( a ); // ReferenceError
Run Code Online (Sandbox Code Playgroud)
哇!这是一些丑陋,怪异的代码.我们看到一个try/catch似乎强行抛出一个错误,但它抛出的"错误"只是一个值2,然后接收它的变量声明在catch(a)子句中.介意:吹.
这是正确的,catch子句具有块范围,这意味着它可以在ES6之前的环境中用作块填充的polyfill.
"但是......",你说."......没有人愿意像那样编写难看的代码!" 确实如此.没有人写过(某些)CoffeeScript编译器输出的代码.这不是重点.
关键是工具可以将ES6代码转换为在ES6之前的环境中工作.您可以使用块作用域编写代码,并从这些功能中受益,并让构建步骤工具负责生成在部署时实际工作的代码.
这实际上是所有(大多数)ES6的首选迁移路径:在从ES6之前到ES6的过渡期间,使用代码转换器来获取ES6代码并生成与ES5兼容的代码.
有绝对没有办法模仿/垫片ECMAScript中的关键字.所以你要么选择完全使用它(目前这可能是一个非常糟糕的主意),或者你还不能使用它.
您可能知道,它let是ECMAscript Next/Harmony的一部分,充其量只是在某些浏览器中作为实验性功能提供的.即使let是一个非常稳定的功能,ES.Next规范仍然在变化.去玩它,但依靠itho真的没有意义.