【问题标题】:Illegal continue statement?非法的继续声明?
【发布时间】:2013-01-28 02:13:43
【问题描述】:

我有类似下面的代码:

_.each data, (value, type) ->
    switch type
        when "answered"
            icon = "results_answered"
            label = definitions.results.metrics.ta
        when "leftblank"
            icon = "results_lb"
            label = definitions.results.metrics.tlb
        when "standing"
            icon = "results_standing"
            label = definitions.results.metrics.cs
        when "minimum"
            icon = "results_min"
            label = definitions.results.metrics.lowest
        else
            continue

    metricLine = utilities.div("metricline")
    metricLine.grab utilities.sprite(icon, "metric_icon")
    metricLine.grab utilities.div("metriclabel", label + ":")
    metricLine.grab utilities.div("metricvalue", value)
    metricContainer.grab(metricLine)

metricContainer

但它会向我的浏览器抛出以下错误:

Uncaught SyntaxError: Illegal continue statement

是否可以像我尝试的那样包含continue 而不会引发错误?

【问题讨论】:

  • 你到底想continue什么?
  • continue 是 JavaScript 语言功能。如果在其封闭的词法范围内没有常规循环,它可能无法工作。
  • 我想在我的continue 之后为当前项目执行任何代码,而不是执行循环中的下一个项目。

标签: javascript coffeescript


【解决方案1】:

如果你想继续下一个循环迭代,你需要return,而不是continue,因为你传递给each的是一个函数。

在您提到熟悉 C# foreach 循环的评论中,因此想要使用 continue。不同之处在于,使用 C# 的 foreach,您正在处理一个实际的循环构造,而 each 实际上是为每个循环迭代调用一个函数,所以它不是(在语言级别)一个循环,所以你可以' t continue它。

【讨论】:

  • 是的,就是这样,对不起,我来自 C# 背景,continue 显然意味着别的东西。
  • 啊,这更有意义。谢谢你的解释!
  • 谢谢!为我节省大量时间寻找 angularJs 的“继续”语句替代项
【解决方案2】:

您在代码中使用的不是循环结构,而是闭包。 您只能通过 continue 退出循环。使用下划线时 函数你必须通过 return 退出闭包/函数

#language construct
for item in items
    if some_condition
        continue

#closure construct
_.each data, (item) ->
    if some_condition
        return

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-09
    • 1970-01-01
    • 2020-04-17
    • 1970-01-01
    相关资源
    最近更新 更多