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'

4

4 に答える 4

14

ラベルはループの直前に来る必要があります

x = genX(radius);
y = genY(radius);

iCantThinkOfAGoodLabelName:
for(i in circles) {
于 2011-06-18T03:26:42.270 に答える
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 = [];
    }
}
于 2011-06-18T03:29:09.560 に答える
3

ラベル名と関連するループの間にステートメントがあってはなりません。

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

それを修正します。

于 2011-06-18T03:27:27.687 に答える
1

v0.8.x最近この問題が発生し、Node.jsのバージョンでループのラベルにすべて小文字を使用して解決しました。

labelname:vs.を使用iCantThinkOfAGoodLabelName:すると役立つ場合があります。

他の人は、ラベルの場所を正しく修正しました。forループの直前にある必要があります。

ラベルに関するMozilla Developer Network は、ラベルの使用を避け、代わりに関数を呼び出すか、エラーをスローすることを推奨しています。可能であれば、それらを使用する戦略を再考することをお勧めします。

結果に応じて関数を呼び出す例:

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); 
      }
   }
}
于 2013-04-29T13:00:32.903 に答える