Javascript 在非空数组中循环空数组会产生无限循环:为什么?
为什么,如果一个在空数组上执行的for循环嵌套在另一个在非空数组上执行的for循环中,我会得到一个阻止无限循环的浏览器Javascript 在非空数组中循环空数组会产生无限循环:为什么?,javascript,loops,for-loop,Javascript,Loops,For Loop,为什么,如果一个在空数组上执行的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=
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]);
}
}
var-links=[];
变量锚=['a','b','c'];
//非空循环
对于(var i=0;i当第二个循环执行时,您正在将i
变量(它等于1
在第一个for
循环的第一个循环后)重置为0
。当第二个循环执行第一个循环时,第一个循环中的情况相同(并且i
具有1
值),它将被第一个循环再次重置为0
。依此类推…直到世界末日
Hovewer-就像Ori指出的那样-如果您使用let
在循环中声明i
变量,那么一切都会顺利进行
var-links=[];
变量锚=['a','b','c'];
//非空循环
for(设i=0;i }
好,如果嵌套数组是empy,则其长度为0,因此:
for(var i=0; i<0;i++) {
console.log(links[i]);
}
for(var i=0;i,因为链接数组的长度为0。何时执行此代码
for(var i=0; i<links.length;i++)
不会求值如果数组为空,则其长度为0
。如果i
为0,且长度为0,则i<0
条件未满足-循环甚至不会启动。因此,我认为情况并非如此。为什么?因为“let”使变量循环作用域?@AmintaCode,因为var
的作用域是最近的函数块(在您的情况下,它就像一个全局变量,因为您没有将代码包装到函数体中),并且let
的作用域是最近的封闭块。
console.log(links[i]);