在这个简单的 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/