Почему этот помеченный javaScript продолжает не работать? - PullRequest
9 голосов
/ 18 июня 2011

Я использую этот код, чтобы выдержать некоторые круги, которые перекрываются:

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 ]

10 голосов
/ 18 июня 2011

Метка должна появиться непосредственно перед циклом

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

iCantThinkOfAGoodLabelName:
for(i in circles) {
7 голосов
/ 18 июня 2011

Потому что 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 голосов
/ 18 июня 2011

Не должно быть никаких операторов между именем метки и связанным циклом.

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

исправляет его.

1 голос
/ 29 апреля 2013

У меня недавно была эта проблема, и я решил ее, используя все строчные буквы в метке цикла в версии v0.8.x Node.js.

Использование labelname: против iCantThinkOfAGoodLabelName: может помочь вам.

Другие правильно исправили вас на месте расположения этикетки. Это должно быть непосредственно перед циклом for.

Сеть разработчиков Mozilla на ярлыках рекомендует избегать использования ярлыков и вместо этого предпочитать вызывая функции или , выдавая ошибку. Если возможно, вы можете переосмыслить свою стратегию их использования.

Пример вызова функции в зависимости от результата:

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); 
      }
   }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...