javascript - 就浏览器兼容性而言,在 javascript 中使用 "let"?

标签 javascript backwards-compatibility polyfills

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

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

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

最佳答案

让我引用一下我刚刚在 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 子句具有 block 作用域,这意味着它可以在 ES6 之前的环境中用作 block 作用域的 polyfill。

“但是……”,你说。 “......没有人愿意写那样丑陋的代码!”这是真的。也没有人编写(部分)CoffeeScript 编译器输出的代码。这不是重点。

重点是工具可以转换 ES6 代码以在 ES6 之前的环境中工作。您可以使用 block 作用域编写代码,并从此类功能中获益,并让构建步骤工具负责生成在部署时实际工作的代码。

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

关于javascript - 就浏览器兼容性而言,在 javascript 中使用 "let"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13581537/

相关文章:

typescript - 如何在 typescript (模块)中将 polyfills 添加到 Globals

javascript - HTML5中的polyfills是什么意思?

javascript - 输入 slideUp/slideDown 问题

javascript - Vue.js nextTick 在计算属性中

c++ - 各种版本的 Mac OSX 的向后兼容性如何? (Xcode C++

python - 对象/XML 向后兼容性

.net - DataContractSerializer:为什么不删除成员?

javascript - IE11 中的 Object.assign() 和 Angular2

javascript - 如何更改 spago 的 Node 堆栈限制?

javascript - 如何通过序列化表单数据发送数据