JavaScript中正确使用continue的方法

7

我一直认为使用continue的方式如下:

var i;

for (i = 0;  i < 10; i++) {
  if(i%2===0) {
    continue;
  }
}   
或者
var i, myloop;

myloop: for (i = 0;  i < 10; i++) {
  if(i%2===0) {
    continue myloop;
  }
}

但是当我通过JSLint运行这两段代码时,会出现以下错误:


第5行第5个字符的问题:意外的 'continue'。
     continue;

我做错了什么?正确的用法是什么?


2
你必须将 var i 提前才能继续进行,对吧?改进你的代码是 JSLint 的次要关注点,强制执行 Doug Crockford 对 JavaScript 的个人意见是它的首要任务。如果你想要一个不那么主观的替代方案,可以考虑使用 JSHint - Jonny Buchanan
1
是的。JSHint。JSLint太过教条主义。 - Roman Starkov
5个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
9

我猜 JSLint可能不喜欢 continue:

通常有更好的写法来更明确地定义你要做什么,而不是使用continue。 JSLint关注的是好的部分,而不是可接受的部分。 它强制你使用比定义更高的标准。

Douglas在他的书中说得最好:

"continue语句跳转到循环顶部。我从未见过一段代码,它不通过重构来除去continue语句而得到改进。"


10
虽然如此,"continue"可让循环中的操作轻松地“提前退出”。我猜内部循环可以放在一个外部函数中以保持可读性,但这并不总是方便的。 - Evert
@Evert:你可能把continue和break搞混了(break会做你所说的事情,而且Crockford也不反对使用它)。 - xofon
1
不好意思,假设你想循环一个数组,但只想对其中某些元素执行某些操作。我可以在循环顶部使用 if (!condition) continue; 或者 if (condition) { .. } stuff。前者的优点是少了一层嵌套。 - Evert
@Evert:我明白了,现在我理解你的措辞了(“在循环中提前退出”让我感到困惑)。关于continue vs.嵌套的问题,重点是具有额外的嵌套级别是一件好事,因为它清晰地表明只有在满足条件时代码才适用。 (就个人而言,我不确定我更同意Crockford还是你,但我绝对不会称其为“如此愚蠢”。) - xofon
很好;我对 Crockford 的其他观点有不同意见,比如核心对象过载.. 呃。 - Evert
16
我从未理解为什么"continue"这个关键字如此难以理解。一旦你确认在当前循环中不需要再执行任何其他操作,那么使用它是毫无道理可言的。 - Erik Reppen

3

0

JSlint底部有一个选项,上面写着

容忍continue

也许它有问题?


0

JSLint不喜欢continue,因为Douglas不喜欢它。

continue跳到下一次迭代。如果您不插入它,代码将继续执行。如果您想退出循环,请使用break


0

这对我来说已经足够好了。 // eslint-disable-next-line no-continue


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,