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

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=

为什么,如果一个在空数组上执行的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]);
       }
    }
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]);