Вопрос про петли и продолжение - PullRequest
4 голосов
/ 10 февраля 2010

Так это на самом деле именование цикла nextLoop? Так, когда он говорит continue nextLoop, он сразу же возвращается к вершине?

   var total = 0;
        nextLoop:
        for ( var i = 0; i < 7; ++i ) {
            for ( var j = 0; j < 6 ; ++j ) {
                if ( i < 5 )
                continue nextLoop;
                total++;
                }
            total++;
        }
    total++;
    document.write( total );

Edit:

Это название цикла nextLoop:? Если так, что еще вы можете назвать? Любые ссылки на то, почему именование может быть полезным?

Ответы [ 4 ]

8 голосов
/ 10 февраля 2010

Да. Это полезно, когда у вас есть цикл, вложенный в другой цикл, и вы хотите продолжить цикл external . Вот страница на MDC об этом. Итак, в вашем случае, во время цикла i = 2, если из цикла j вы скажете continue nextLoop, он выпрыгнет из цикла j, сделает приращение i и продолжит с i = 3.

Использование continue с метками не является обычно хорошей практикой; это может указывать на то, что логика нуждается в рефакторинге. Но это совершенно верно синтаксически, и я ожидаю, что кто-то вступит в пример с ситуацией, когда он считает, что это абсолютно необходимо.

Редактировать Отвечая на ваши изменения, метка (имя) цикла будет nextLoop (без двоеточия): вы можете пометить операторы, а затем использовать эти метки в качестве целей continue и break. Проверьте спецификации для деталей. Обычно используется для обозначения циклов, как в вашем примере, и continue или break их, но обратите внимание, что break также применяется к вложенным операторам switch - вы можете пометить их как циклы и разбить на внешние изнутри одного из внутренних дел. Вы можете даже смешивать их, чтобы вы могли разорвать цикл изнутри коммутатора (пространство имен метки является общим для обоих).

1 голос
/ 10 февраля 2010

Да, это ожидаемое поведение. Взгляните здесь

1 голос
/ 10 февраля 2010

Это так. Но вам следует избегать этого. Это плохая практика, похожая на go to. Делает код трудным для чтения, понимания и спагетти.

0 голосов
/ 10 февраля 2010

другие языки позволяют вырваться из выбранного количества внутренних циклов, if (! x) перерыв 2; будет продолжать процесс на два шага вверх.

Я видел сложные циклы с несколькими метками циклов, и продолжает вызываться к определенной метке, но я согласен, что это может запутать логику.

Вы почти всегда можете повысить эффективность цикла, написав его без продолжения:

var total= 0;
nextLoop: 
for (var i = 0; i < 7; ++i ){
    for (var j = 0; j < 6 ; ++j ){
        if(i>4) total++;
    }
    total++;
}

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