在非空数组中循环空数组会产生无限循环:为什么?



为什么,如果一个 I 嵌套在空数组上执行的另一个 for 循环中,另一个在非空数组上执行的 for 循环,结果我得到一个浏览器阻塞无限循环?

var links = [];  
var anchors = ['a', 'b', 'c'];  
// not empty loop
for(var i=0; i<anchors.length;i++) {
console.log(anchors[i]);
// empty loop
for(var i=0; i<links.length;i++) {
console.log(links[i]);
}
}

for(var i=0; i<links.length;i++)中的代码甚至没有被计算,那么为什么会有这种行为呢?

当第二个循环执行时,您将i变量(它等于第一个for循环中第一个循环后的1(重置为0。在第一个循环中,当第二个循环完成first循环(并且i具有1值(时,它被重置为0在第一个循环中再次。等等...直到世界末日。

Hovewer- 就像 Ori 指出的那样 - 如果你使用let在循环中声明i变量,一切都会顺利进行。

var links = [];
var anchors = ['a', 'b', 'c'];
// not empty loop
for (let i = 0; i < anchors.length; i++) {
console.log(anchors[i]);
// empty loop
for (let i = 0; i < links.length; i++) {
console.log(links[i]);
}
}

好的,所以如果嵌套数组是 empy,它的长度是 0,所以:

for(var i=0; i<0;i++) {
console.log(links[i]);
}

"i"永远不会是0,循环将是无限的......

因为链接数组的长度 = 0。何时执行此代码

for(var i=0; i<links.length;i++)

1( 变量赋值 0

2( 获取链接长度 - 它是 0。 3(因为0<1,

console.log(links[i]);

不会评估

最新更新