2010-02-10 105 views
4

那么这实际上是否将循环命名为nextLoop?所以当它说continue nextLoop时,它是否回到顶部马上?关于循环的问题并继续

var total = 0; 
     nextLoop: 
     for (var i = 0; i < 7; ++i) { 
      for (var j = 0; j < 6 ; ++j) { 
       if (i < 5) 
       continue nextLoop; 
       total++; 
       } 
      total++; 
     } 
    total++; 
    document.write(total); 

编辑:

是这样命名的循环nextLoop:?如果是这样,你还能说出什么名字?任何提及为什么命名的东西都可能有用?

+0

我从来不知道如何回答这样的问题。答案是“是的,你完全正确”,但这似乎不值得一个职位。 – 2010-02-10 16:53:39

+0

更新我的答案以回答您的修改。 – 2010-02-10 17:30:17

回答

8

是的。当你有一个嵌套在另一个循环内的循环,并且你想要继续循环时,这非常有用。 Here's a page on MDC关于它。因此,在你的情况下,在i = 2循环中,如果从j循环中,你说continue nextLoop,它将跳出j循环,执行i增量,并继续使用i = 3

使用continue与标签不是通常良好做法;它可以表明逻辑需要被重构。但是它在语法上是完全有效的,我希望有人会以一种他们认为绝对必要的示例情况作为参考。

编辑回答您的编辑,循环的标签(名称)是nextLoop(没有冒号):你可以标记语句,然后使用这些标签作为continuebreak目标。详情请查看the spec。典型的用法是标记循环,如continuebreak他们,但请注意,break也适用于嵌套switch语句 - 您可以将它们标记为循环,并将其标记为内部的一个案例中的外部循环。你甚至可以混合它们,这样你就可以在交换机中打破一个循环(标签命名空间对两者都是通用的)。

+1

我认为你无论如何都可以没有它。 – anthares 2010-02-10 16:59:03

+0

感谢您提供有用的参考资料,说明它为何有用! – Strawberry 2010-02-10 17:02:40

1

它的确如此。但你应该避免它。这是一种不好的做法,类似于go to。使代码难以阅读,理解和意大利面条喜欢。

1

是的,那是预期的行为。看看here

0

其他语言让你突破选定数量的内部循环, if(!x)break 2;将在两个阶段继续进行。

我已经看到复杂的循环与多个循环标签, 并继续调用到一个特定的标签,但我同意它可以混淆逻辑。

你几乎总是可以通过写它没有继续提高循环效率:

var total= 0; 
nextLoop: 
for (var i = 0; i < 7; ++i){ 
    for (var j = 0; j < 6 ; ++j){ 
     if(i>4) total++; 
    } 
    total++; 
} 

total++;