为什么标记为 JavaScript continue 的代码无法运行?

11

我正在使用这段代码来检查圆是否重叠:

iCantThinkOfAGoodLabelName:
x = genX(radius);
y = genY(radius);
for(i in circles) {
  var thisCircle = circles[i];
  if(Math.abs(x-thisCircle["x"])+Math.abs(y-thisCircle["y"])>radius*2) { //No overlap
    continue;
  } else { //Overlap
    continue iCantThinkOfAGoodLabelName; //<- Line 256
  }
  thisCircle = [];
}

但是当遇到 continue 语句时,Chrome 开发者控制台会显示以下错误:client.html:256 Uncaught SyntaxError: Undefined label 'iCantThinkOfAGoodLabelName'


你尝试过使用break而不是continue吗?也许continue只能跳到循环语句上的标签。 - Mark Eirich
4个回答

14
标签应该紧接着循环出现。
x = genX(radius);
y = genY(radius);

iCantThinkOfAGoodLabelName:
for(i in circles) {

在这种情况下,任何关于如何生成X和Y值的建议都将非常有帮助。 - JJJollyjim
没有理由不能在标签之前生成它们。标签的存在不会以任何方式影响这些行。 - Brad Mace
2
这个为什么不能工作?我按照说明操作了,但是还是得到相同的错误。 - Wayne Smallman

7

因为 iCantThinkOfAGoodLabelName: 需要紧挨着循环。

iCantThinkOfAGoodLabelName:
for (blah; blah; blah)
    ..

我认为您需要的是一个函数。
function iCantThinkOfAGoodFunctionName() {
    var x = genX(radius),
        y = genY(radius);

    for (i in circles) {
        var thisCircle = circles[i];
        if(Math.abs(x-thisCircle["x"])+Math.abs(y-thisCircle["y"])>radius*2) { //No overlap
            continue;
        } else { //Overlap
            iCantThinkOfAGoodFunctionName();
        }
        thisCircle = [];
    }
}

3
x = genX(radius);
y = genY(radius);
iCantThinkOfAGoodLabelName:
    for(i in circles) {

修复它。

1

我最近遇到了这个问题,并通过在 Node.js 的版本 v0.8.x 中在循环的标签中使用全部小写来解决它。

使用 labelname:iCantThinkOfAGoodLabelName: 相比可能会有所帮助。

其他人已经正确地纠正了您关于标签位置的错误。它应该紧接在 for 循环之前。

Mozilla Developer Network on labels 建议避免使用标签,而是更喜欢 调用函数抛出 错误。如果可能的话,您可以重新考虑使用它们的策略。

根据结果调用函数的示例:

var i, j;

for (i = 0; i < 3; i++) {
   for (j = 0; j < 3; j++) {   
      if (i == 1 && j == 1) {
         // we want to ignore and continue
      } else {
         // do work with these variables from inside the doWork function
         // (scoped to whatever scope `this` for loop is in)
         doWork.call(this, i, j); 
      }
   }
}

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