的Javascript:略初始化嵌套For循环内

问题描述:

我们知道,我们可以省略内部的for循环的初始化:的Javascript:略初始化嵌套For循环内

var i = 0; 
for(; i < 10; i++) { 
    // do Something with i 
} 

但是,我想,如果我省略了嵌套循环内的初始化,以及:

var i = 0; 
var j = 0; 
for(; i < 10; i++) { 
    for(; j < 10; j++) { 
    // only do Something with j 
    // outner loop only run once 
    } 
} 

解决方案:

var i = 0; 
var j; 
for(; i < 10; i++) { 
    j = 0; 
    for(; j < 10; j++) { 
     // everything is fine! 
    } 
} 

谁能解释怎么回事?我是Javascript新手。

+0

当您在两个循环之外初始化j = 0时。 然后,对于i = 0,内循环将运行,然后j的值为10; 之后,该值从未初始化为0,这是您在第二种情况下所做的。 由于内循环只运行一次(仅在i = 0时) – 2016-07-15 09:50:54

循环运行多次,但在第一次运行i之后,'j'已经是10,所以第二个循环不再在i的下一个值期间运行。

如果你会写这样的东西。

for(; i < 10; i++) { 
    for(; j < 10; j++) { 
      console.log("test") 
     } 
     console.log("another test") 
    } 

您会看到两条消息都打印了10次。

你的“j”循环只运行“十次一次”的原因是因为在运行10次后你不会将J置回零。因此,如果i第一次运行后,则对于每个循环,语句j < 10都是正确的。

你可以通过循环设定j = 0第一内解决这个问题(如果你不想把它放在第二循环的变量初始化内。)

for(; i < 10; i++) { 
    j = 0; 
    for(; j < 10; j++) { 
     console.log("test") 
    } 
    console.log("another test") 
} 
+0

啊哈!看起来我已经做了一些简单的编程错误。 outner循环实际上是运行的,只是变量j在第一次运行时触发了计数器,所以它不会再次运行。感谢您的解释=)! –

+0

@Hunter.Wei没问题!如果你愿意,你可以接受这个答案是正确的,让其他人知道它是正确的。 (并且如果你愿意,upvote) –

每次i增量,您需要重置j0

如果你重写你的脚本,使每个变量被初始化for loop声明本身,那么每次i增量,j将被重置为0

for (var i = 0; i < 10; i++) { 

    for (var j = 0; j < 10; j++) { 
    } 

} 
+0

OP知道这一点,他问了一个关于当我们忽略for循环内初始化时会发生什么的问题。 :-) –

+0

我认为你的回答比较好,@DylanMeeus和我已经提高了你的答案。但我不相信OP知道_“每次'i'增加时,都需要将'j'重置为'0'。” - - 因为它正是不知道这个(或者看到它)导致OP问他们的问题。 – Rounin

+1

我认为他这么做,考虑到标题说(忽略初始化)和第一句话。但感谢您的满意!如果他的确不*知道这个,你的回答就是正确的答案! –