为什么,如果一个 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]);
不会评估