какая разница между разрывом с меткой и без метки в javascript - PullRequest
17 голосов
/ 25 февраля 2011

var num = 0;
for(var i = 0; i < 10; i++){
  for(var j = 0; j < 10 ; j++){
    if(i == 5 && j == 5){
      break;
    }
    num++;
  }
}

console.log(num)

В приведенном выше коде я ожидаю, что результат будет 55, но почему результат 95.

Но почему, если я добавлю метку, результат станет 55?

var num = 0;
outermost:
for(var i = 0; i < 10; i++){
  for(var j = 0; j < 10 ; j++){
    if(i == 5 && j == 5){
      break outermost;
    }
    num++;
  }
}

console.log(num);

Ответы [ 6 ]

19 голосов
/ 25 февраля 2011

при использовании без метки, разрывать только разрывать токовую петлю, в вашем случае самый внутренний для. Итак, теперь j = 6, условие теперь неверно, и циклы продолжаются еще на 40.

Когда вы ставите метку, переходите к «уровню» метки, поэтому два цикла for пропускаются.

4 голосов
/ 25 февраля 2011

Использование break без метки прерывает самый внутренний цикл, который выполняется в данный момент.

Использование break с меткой foo разрывает оператор с меткой foo.

MDN break документы :

Оператор break включает в себя необязательную метку, которая позволяет программе выйти за пределы помеченного оператора.Оператор break должен быть вложен в этот помеченный оператор.Помеченный оператор может быть любым оператором block ;ему не обязательно должен предшествовать оператор цикла.

4 голосов
/ 25 февраля 2011

Без метки break вырвется из внутреннего цикла.С помощью метки вы можете остановить выполнение вложенных циклов.

См. Примеры:

https://developer.mozilla.org/en/JavaScript/Reference/Statements/label

1 голос
/ 19 июля 2013

когда вы используете разрыв без метки, он разрывает только внутренний цикл (i = 5 j = 6), (i = 5 j = 7), (i = 5 j = 8), (i = 5 j = 9) только и цикл снова начинается с (i = 6 j = 0) до (i = 9 j = 9), а также считается (num ++), поэтому он показывает результат как 95.

bt когда вы используете разрыв с меткой, т. Е. Разрыв с внешней стороны, он вырывается из метки цикла как самый внешний (т. Е. Внешний цикл), поэтому6 он выдает результат как 55

1 голос
/ 08 сентября 2011

разрыв дан только внутри цикла for. поэтому он прерывает только внутренний цикл for, когда i = j = 5. но внешний цикл продолжает вращаться 10 раз. поэтому при i = j = 5 цикл будет вращаться только 5 раз, а в остальных случаях он будет вращаться 10 раз.

0 голосов
/ 25 февраля 2011

Первый разрывает только петлю "j". После этого он возвращается в цикл «i» и увеличивает значение «i» до 6. Как только «i» становится равным 6, он возвращается в цикл «j» и условие if больше не выполняется. Таким образом, он продолжает складывать «num».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...