32

我有类似于以下代码的内容:

_.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

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

未捕获的 SyntaxError:非法的 continue 语句

是否可以在continue不抛出错误的情况下包含我正在尝试的内容?

4

2 回答 2

82

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

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

于 2013-02-12T17:26:09.880 回答
11

您没有在代码中使用循环构造,而是使用闭包。您只能通过 continue 退出循环。使用下划线每个函数时,您必须通过 return 退出闭包/函数

#language construct
for item in items
    if some_condition
        continue

#closure construct
_.each data, (item) ->
    if some_condition
        return
于 2013-02-12T17:30:11.843 回答