javascript - 为什么 Babel 6 有一些(不必要的)代码转换

标签 javascript ecmascript-6 babeljs

在这个简单的 Babel (6.1.18) 示例中,babel --presets es2015 test.js 转换:

'use strict'; // enable strict mode

(function () {
    const A = 3;
}());

'use strict' // enable strict mode
;
(function () {
    var A = 3;
})();

这主要是出于好奇,但我有兴趣更好地理解原因: - 第一行中分号的位置已移至单独的一行 - iife 的语法已从 (function () {}()); 更改为 (function () {})();

最佳答案

抽象 语法树不保留格式信息,例如调用括号是在分组运算符的外部还是内部。实际上,分组运算符 ((...)) 是 not even represented in the AST .

这就是人们致力于 Concrete Syntax Tree implementation 的原因,其中将包含此类信息以及代码生成器随后可以使用的内容以更接近原始源代码。

如果代码的那部分没有改变(例如 recast ),有些工具可以重用原始代码,但是因为 Babel 主要专注于为浏览器转换代码,所以这可能不太重要。现在 Babel 更像是一个平台,这可能会改变。

关于javascript - 为什么 Babel 6 有一些(不必要的)代码转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33737718/

相关文章:

javascript - 如何将文件夹中的所有文件作为模块导入并将所有文件导出为对象?

Javascript - 按条件使用链式函数的不同部分

node.js - 如何使用事件发射器作为异步生成器

javascript - 禁用/忽略用于转译 javascript 文件的 Babel 严格模式

javascript - 将函数 * 提升为异步函数 *?

JavaScript 垂直数组

javascript - 从特定来源缩放 Canvas

javascript - 解构对象参数,还要引用参数作为对象?

javascript - 如何转义 Javascript 中的保留字

javascript - 将 Prop 从 react 路由器传递给服务器上的 child