Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么Typescript中的`for…`of`在循环之前复制iterable对象?_Javascript_Typescript_For Of Loop - Fatal编程技术网

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