2013-02-12 101 views
8

我有類似於下面的代碼的東西:非法繼續聲明?

_.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像我想不引發錯誤?

+0

你究竟想要「繼續」? – jAndy 2013-02-12 17:25:38

+0

'continue'是一種JavaScript語言功能。如果沒有其封閉詞彙範圍中的常規循環,它可能不起作用。 – millimoose 2013-02-12 17:26:25

+0

我想繼續循環中的下一個項目,而不執行當前項目的「繼續」之後的任何代碼。 – 2013-02-12 17:26:33

回答

38

如果你想繼續下一個循環迭代,你需要return而不是continue,因爲你正在傳遞給each是一個函數。

在您提到的評論中,您熟悉了C#foreach循環,因此想要使用continue。所不同的是,用C#的foreach,你正在處理一個實際的循環結構,而each實際上是爲每個循環迭代調用一個函數,所以它不是(在語言級別)循環,所以你不能continue它。

+0

是的,是的,抱歉,我來自C#背景,「繼續」顯然意味着別的東西。 – 2013-02-12 17:28:43

+1

Ahhhhh,這更有意義。感謝您的解釋! – 2013-02-12 17:32:04

+0

謝謝! 爲我節省了很多時間來尋找angularJs的「continue」語句替代方法 – ahmednawazbutt 2017-09-13 06:15:25

8

你沒有在你的代碼中使用循環結構,而是使用閉包。 您只能繼續退出循環。當使用下劃線函數,你必須通過返回退出關閉/函數

#language construct 
for item in items 
    if some_condition 
     continue 

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