Compilation ';var';和';让';在Typescript 1.5中

Compilation ';var';和';让';在Typescript 1.5中,compilation,typescript,ecmascript-6,ecmascript-5,Compilation,Typescript,Ecmascript 6,Ecmascript 5,在Typescript中使用“var”或“let”之间的区别到底是什么?我知道“let”允许将变量进一步定义到一个范围中,而不必在所述范围之外使用它。对于for循环中的迭代器来说,这显然是一个很好的优势。我知道这是一个ES6定义,所以编译到ES6在“var”和“let”方面应该看起来几乎相同 但是,当它编译成不支持“let”的ES5 javascript时,到底发生了什么?编译器是否创建了一些命名奇怪的变量,以防止在Typescript文件的上下文中使用这些变量?在整个函数中定义许多“let”变

在Typescript中使用“var”或“let”之间的区别到底是什么?我知道“let”允许将变量进一步定义到一个范围中,而不必在所述范围之外使用它。对于for循环中的迭代器来说,这显然是一个很好的优势。我知道这是一个ES6定义,所以编译到ES6在“var”和“let”方面应该看起来几乎相同

但是,当它编译成不支持“let”的ES5 javascript时,到底发生了什么?编译器是否创建了一些命名奇怪的变量,以防止在Typescript文件的上下文中使用这些变量?在整个函数中定义许多“let”变量的情况下会发生什么?我是否应该关注性能影响


基本上,当typescript将let变量编译为ES5 javascript时会发生什么?

找到这些问题答案的最简单方法是在中尝试

TypeScript重命名块范围内的变量。与使用用
var
定义的正则变量相比,没有性能开销

此代码:

var i = 0;
for (let i = 0; i < 5; i++) {}
i++;
var i=0;
对于(设i=0;i<5;i++){}
i++;
汇编至:

var i = 0;
for (var i_1 = 0; i_1 < 5; i_1++) { }
i++;
var i=0;
对于(var i_1=0;i_1<5;i_1++){
i++;

是关于
let

的更多信息。我认为这对程序员来说不是一个好问题。SE:这个网站是关于软件开发概念的,但你要问的是特定语言的具体实现细节。如果您对编译器通常如何实现词法作用域感兴趣,这可能是本文的主题(但可能过于宽泛)。因为你本质上是在问一个编程工具,我投票选择迁移到堆栈溢出,它似乎更适合这种问题。我认为这是一个很好的问题。你是对的,这可能是深入研究类似问题的最好方法。同样有趣的是,如果您尝试加入一个var i_1,它会自动将let放入i_2中。有点整洁。