如果 babel 将 let 和 const 转换为 var,有什么区别?



我已经尝试了babel transpiler,并且它将所有的let,const和var转换为just var,所以总的来说,我们的代码使用情况有什么区别?
我已经阅读了文档,我知道LET,const和var 之间有什么区别,但是如果最终将所有这些都转换为var ,那么差异?这意味着在性能甚至范围上都没有任何有意义的差异!

更新(02.14.2019):基于我了解范围确实很重要的答案,即使它们转换为VAR,Babel仍然保留了范围的含义。我的问题仍然是关于性能的,是否有任何有意义的性能差异?

我已经连接了转板器的输入和输出,情况更复杂
输入

let a = 1;
for (let a = 0; a !== 0;) {
  for (let a = 0; a !== 0;) {}
}

输出

"use strict";
var a = 1;
for (var _a = 0; _a !== 0;) {
  for (var _a2 = 0; _a2 !== 0;) {}
}

babel将ES6语法转换为ES5语法(或您要处理的JS的任何来源和目标版本)。

这通常会失去代码中的一些细微差别,但是您正在研究一个非常微不足道的示例。

而是考虑这个:

let x = 1;
{
  // Inside a block, this is a different x
  let x = 2; 
  console.log(x);
}
console.log(x);

Babel会将其转换为:

"use strict";
var x = 1;
{
  // Inside a block, this is a different x
  var _x = 2;
  console.log(_x);
}
console.log(x);

查看它如何重命名内部x,以免覆盖外部?

它在ES5中尽可能多地表达ES6的效应,即使结果很难看(因为ES6的优雅特征不可用)。

babel会针对每个变量运行检查,如果违反某些程序规则,则会丢弃错误。例如,如果定义了const,并且该值以后更改,则将违反该类型的规则。另一个是,如果变量在已经存在的范围中重新定义(这可能是同名的函数)。在某些情况下,预告片简单地将事情重命名以防止冲突。

最新更新