为什么 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
变量的引用产生影响,总的来说,这并不容易。
例如:
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
变量的引用产生影响,总的来说,这并不容易。