【发布时间】:2019-07-08 16:55:15
【问题描述】:
我试过the babel transpiler,它把All let、const 和var 都转换成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;) {}
}
【问题讨论】:
-
有区别,在块{}中声明let,尝试在块外访问。对 var 做同样的事情,重复。它可能会将所有内容转换为 var,但对于 let 和 const,我很确定适用特殊规则。这个问题没有问任何有意义的问题,如果你说你知道它们之间的区别,那么这个问题根本没有必要。
-
不是所有的 Babel 配置都将“const”和“let”变成“var”。但这个问题仍然有效。
-
@squeekyDave 我更新了我的问题,以便它反映 cmets 中所说的内容,但我关于 性能 的问题仍然存在。 babel 还是将它们全部转换为 var,只是用了一些规则来保持作用域的含义。如果都是var,那么性能有什么区别吗?
-
@rml 抱歉,我不知道,在哪些配置中它不会转换它们?
标签: javascript ecmascript-6 babeljs javascript-objects ecmascript-5