Javascript 为什么Typescript中的`for…`of`在循环之前复制iterable对象?
例如:Javascript 为什么Typescript中的`for…`of`在循环之前复制iterable对象?,javascript,typescript,for-of-loop,Javascript,Typescript,For Of Loop,例如: 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]; } var-aKeys=[]; 对于(var\u i=0,aKeys\u 1=aKeys;\u i
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];
}
var-aKeys=[];
对于(var\u i=0,aKeys\u 1=aKeys;\u i
这里的aKeys_1
有什么意义
您还可以在Typescript游乐场中查看此live 因为您可以在循环体中重新分配
aKeys
,并且不会影响迭代。当然,当你不需要的时候,这是没有必要的,但是运输者并不确定
一般来说,正如@Thomas在评论中所观察到的,表达式必须只计算一次——虽然很容易看出它对引用
常量变量没有影响,但一般来说并不容易。因为您使用了let而不是var@toskv我想做点什么,但在操场上试试看。不正确。@OmarAlshaker,因为数组可以是a.b.c.d(“lorem ipsum”).e[42]
,而不是aKeys
。在这里,如果不缓存正在迭代的数组,您可能会遇到麻烦。我认为通过检查循环的块,它可以很容易地知道,不是吗?或者它只是因为一些原因而没有实现?@MadaraUchiha可以为某些代码块确定它(但是)。当它在某处遇到eval
时,它需要退出,但任何函数调用都需要跟踪副作用等。因此,是的,“原因”——即使一些简单的情况确实微不足道。像aKeys
被声明为const
。UH