为什么 Typescript 中的 `for...of` 在循环之前复制可迭代对象?

Why does `for...of` in Typescript copy the iterable object before looping?

例如:

const aKeys = [];
for (let key of aKeys) {
...
}

被转译为:

var aKeys = [];
for (var _i = 0, aKeys_1 = aKeys; _i < aKeys_1.length; _i++) {
    var key = aKeys_1[_i];
}

这里的aKeys_1有什么意义?

您也可以在 Typescript playground here 中实时观看。

因为你可以在循环体内重新赋值aKeys,它应该不会影响迭代。当然,当你时就没有必要了,但转译器并不确定。

一般来说,正如@Thomas 在评论中观察到的那样,表达式必须只计算一次 - 虽然很容易看出它不会对 const 变量的引用产生影响,总的来说,这并不容易。