【问题标题】:what is the logic behind its output ? Its giving the same output for both Break and continue它的输出背后的逻辑是什么?它为 Break 和 continue 提供相同的输出
【发布时间】:2019-07-04 10:49:07
【问题描述】:

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

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

带'break;声明:

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

带有“继续”声明:

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

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

【问题讨论】:

  • 它计算偶数。你永远不会得到5
  • 您的for 递增i 并且您手动递增它。所以你的循环步骤是 2,而不是 1 => 你永远不会到达 5,只有 46
  • 结果是一样的,因为在检查的时候i永远不是5

标签: javascript continue


【解决方案1】:

由于在块内部和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; }

【讨论】:

  • 谢谢!那么下面提到的这段代码怎么样,我得到 5 7 9 作为输出,但是由于 continue 语句 for (var i=4; i
  • 不,问题是不是起始值,而是i++;。条件永远不会是true,因为i 永远不会是5i 始终是偶数。
【解决方案2】:

众所周知,

  • Continue - continue 语句终止循环中当前迭代的执行。
  • Break - 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) { 休息; / 继续; } //asi=2这是false,不进入if条件

  3. i++ // i 现在增加到 3
  4. console.log(i) //打印 3
  5. 检查 i
  6. 如果步骤 5 为真,则 i++ //现在 i 增加到 4

循环迭代 2,

  1. 进入循环并检查,

    如果 (i == 5) { 休息; / 继续; } //asi=4这是false,不进入if条件

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

  3. console.log(i) //打印 5
  4. 检查 i
  5. 如果步骤 10 为真,则 i++ //现在 i 增加到 6

循环迭代 3,

  1. 进入循环并检查,

    如果 (i == 5) { 休息; / 继续; } //asi=6这是false,不进入if条件

并按照上述步骤继续下一步。

所以最后的结论,

你的两个代码 sn-p 永远不会进入 if 条件,即

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

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

【讨论】:

    猜你喜欢
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多