它的输出背后的逻辑是啥?它为 Break 和 continue 提供相同的输出

Posted

技术标签:

【中文标题】它的输出背后的逻辑是啥?它为 Break 和 continue 提供相同的输出【英文标题】: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 【参考方案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,

    i = 2

    进入循环并检查,

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

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

循环迭代 2,

    进入循环并检查,

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

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

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

循环迭代 3,

    进入循环并检查,

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

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

所以最后的结论,

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

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

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

【讨论】:

以上是关于它的输出背后的逻辑是啥?它为 Break 和 continue 提供相同的输出的主要内容,如果未能解决你的问题,请参考以下文章

iOS中自动续订订阅背后的逻辑是啥

Weaviate的KNN分类算法背后的逻辑是啥?

Asp.net 寻呼机点击事件未触发,其背后的逻辑是啥?

TypeScript 错误“'delete' 运算符的操作数必须是可选的”背后的逻辑是啥?

break和continue的区别是啥?

Python 代码及其输出的 continue/break 功能