其输出背后的逻辑是什么?它为Break和Continue提供相同的输出

时间:2019-07-04 10:49:07

标签: javascript continue

首先,我对输出感到困惑吗?这样的输出怎么可能?

我尝试了很多逻辑,但是没有通用逻辑/

带有'break;声明:

for (var i = 2; i <= 8; i++) {
  if (i == 5) {
    break;
  }
  i++;
  console.log(i);
}

,带有“ continue”语句:

for (var i = 2; i <= 8; i++) {
    if (i == 5) {
        continue;
    }
    i++;
    console.log(i);
}

两者的输出相同:3 5 7 9

2 个答案:

答案 0 :(得分:0)

由于在块内和for语句内都采用了双倍递增,因此您只能得到偶数进行检查。

//                                                     loop   1   2   3   4
//                                                     ---- --- --- --- ---      
for (var i = 2; i <= 8; i++) { // increment                   2   4   6   8
    console.log('top', i);     // always even                 2   4   6   8
    if (i == 5) {              // check with even value       2   4   6   8
        // continue;
        // break
    }
    i++;                       // increment                   3   5   7   9
    console.log('bot', i);     // always odd                  3   5   7   9
}
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:0)

众所周知,

  • Continue -继续语句在循环中终止当前迭代的执行。
  • 中断-break语句完全中断(停止)循环的执行。

在此代码中,

for (var i = 2; i <= 8; i++) {
  if (i == 5) {
    break; / continue;
  }
  i++;
  console.log(i);
}

您的i被递增两次,一次在loop中,另一次在loop body中,即手动递增。

在这种情况下,循环执行以下步骤,

循环迭代1

  1. i = 2
  2. 输入循环并进行检查,

    如果(i == 5){ 打破; /继续; } //与i=2相同,这是错误的,如果条件不存在,则不会输入

  3. i ++ // i现在增加到3
  4. console.log(i)//打印3
  5. 检查i <= 8 //是
  6. 如果第5步为true,则i ++ //现在i增至4

循环迭代2,

  1. 进入循环并检查,

    如果(i == 5){ 打破; /继续; } //与i=4相同,这是错误的,如果条件不存在,则不会输入

  2. i ++ // i现在增加到5

  3. console.log(i)//打印5
  4. 检查i <= 8 //是
  5. 如果步骤10为true,则i ++ //现在i增至6

循环迭代3

  1. 进入循环并检查,

    如果(i == 5){ 打破; /继续; } //与i=6一样,它是错误的,如果条件

  2. 则不会输入

,并继续进行上述下一步。

最后得出结论

如果满足条件,则您的两个代码段都不会输入

if (i == 5) {
    break; / continue;
}

因此,您的代码永不中断/继续。