Почему JS lables не работает, когда не используется с циклами - PullRequest
0 голосов
/ 12 ноября 2018

Я написал небольшой код JS здесь. Который работает без ошибок

repeat:
  while(true){
    console.log('Start');
    break repeat;
    console.log('End');
  }

Но когда я не использую оператор while, программа выдает ошибку Undefined label repeat

repeat:
    console.log('Start');
    break repeat;
    console.log('End');

Почему программа выдает эту ошибку? Этикетки сделаны только для петель?

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Кроме того, «такая конструкция в основном представляет собой goto в сопротивлении». Я бы предпочел видеть логику, написанную с помощью оператора continue, например:

while (true) {
  console.log('start');
  if (x == y) continue;
  console.log('foo');
  if (q != z) continue;
  ...
}

Я хочу сказать, что «это все еще цикл while, как я и сказал», за исключением того, что он не всегда достигает конца. Когда он не достигает конца, он всегда возвращается наверх.

Оператор break наиболее распространен в случае while (true) и, на самом деле, ожидается любым, кто читает ваш код. Логика работает до тех пор, пока не будет выполнено какое-то условие, после чего она «выходит из цикла» и переходит к следующему за ним утверждению.

Когда вы "break похожи на goto", ваша логика становится намного труднее разгадать и понять. Это очень важное соображение. «Пиши просто и четко, и так, как обычно ожидаешь. Не бросай кривая».

0 голосов
/ 12 ноября 2018

В основном, это работает с кодом блоков .И хотя у вас нет блока, который нужно разбить, код выдает ошибку.

repeat: {
    console.log('Start');
    break repeat;
    console.log('End');
}
...