非法的 continue 语句?

35

我有一个类似下面代码的东西:

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

但是它会在我的浏览器中抛出以下错误:

未捕获的语法错误:非法的 continue 语句

我是否有可能在不抛出错误的情况下包含类似我正在尝试的 continue 呢?


你实际上想要“继续”什么? - jAndy
1
continue是JavaScript语言的一个特性。它可能在没有包含它的词法范围中的常规循环的情况下无法正常工作。 - millimoose
我想跳到循环中的下一个项目,而不执行当前项目中 continue 后面的任何代码。 - Abe Miessler
2个回答

86

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

在评论中,你提到熟悉C#的foreach循环,因此想要使用continue。区别在于,使用C#的foreach时,你正在处理实际的循环结构,而each实际上对于每个循环迭代都会调用一个函数,所以它并不是(在语言层面上)一个循环,因此你不能用continue来控制它。


是的,就是这样,抱歉我来自C#背景,那里的continue显然意味着其他东西。 - Abe Miessler
1
啊哈,现在懂了。谢谢你的解释! - Abe Miessler
谢谢!你为我节省了很多时间,因为我在寻找 AngularJS 的“continue”语句的替代方案。 - ahmednawazbutt

12

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

#language construct
for item in items
    if some_condition
        continue

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

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