【问题标题】:Correct use of continue in javascript在 javascript 中正确使用 continue
【发布时间】:2011-05-04 15:29:22
【问题描述】:

我一直认为你使用继续如下:

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 运行这两个sn-ps 代码时,我得到了错误:

第 5 行字符 5 的问题:意外的“继续”。 继续;

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

【问题讨论】:

  • 您必须将var i 向上移动才能到达那么远,对吧?改进您的代码是 JSLint 的次要关注点,强制执行 Doug Crockford 的个人观点,即 JavaScript 是它的首要任务。如果您想要一个不那么固执己见的选择,总有JSHint
  • 是的。 JSHint。 JSLint 太教条了。

标签: javascript loops


【解决方案1】:

我猜JSLint just hates continue

几乎总是有更好的写作方式 更明确地定义您尝试不做什么的语句 诉诸继续。 JSLint 是关于好的部分,而不是关于 可以接受的部分。它迫使您使用比标准更高的标准 已定义。

道格拉斯在他的书中说得最好:

"continue语句跳转到循环的顶部。我没见过一段 未通过重构以删除 continue 来改进的代码 声明。”

【讨论】:

  • 那太愚蠢了。 “继续”可以很容易地在循环中“提前退出”。我想内部循环可以放在外部函数中,以保持可读性,但这并不总是很方便。
  • @Evert:你一定把 continue 和 break 搞混了(你说的就是你说的,Crockford 并不反对)。
  • 不,抱歉.. 假设您想循环一个数组,但只对该数组中的某些元素执行某些操作。如果(!条件)继续,我可以做;在循环的顶部,或者 if (condition) { .. } 的东西。前者的优点是少了一层嵌套。
  • @Evert:我明白了,现在我明白你的措辞了('在循环中提前退出'让我感到困惑)。关于继续与嵌套的问题,关键是拥有额外的嵌套级别是一件好事,因为它提供了一个清晰的视觉线索,即代码仅在满足条件时才适用。 (就个人而言,我不确定我更同意 Crockford 还是你,但我绝对不会称其为“如此愚蠢”。)
  • 我从来不明白继续读下去有什么难的。一旦你确定你不再需要在给定的迭代中做任何其他事情,就没有理由不使用它。
【解决方案2】:

您必须勾选“容忍继续”,Crockford doesn't like it

【讨论】:

    【解决方案3】:

    JSlint 底部有一个选项显示

    容忍继续

    也许它有问题?

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

        【讨论】:

          猜你喜欢
          • 2013-07-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-02-21
          • 1970-01-01
          • 2021-08-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多