【问题标题】:Breaking out of JavaScript 'For' Loop using False?使用 False 打破 JavaScript 'For' 循环?
【发布时间】:2016-01-01 18:05:00
【问题描述】:

我不知道这是可能的(是吗?)

下面的代码显然记录了值 1 到 5,然后跳出“for”循环,因为返回了“false”值。

function x() {
    for (var i = 0; i < 10; i++) {
        console.log(i);
        if (i == 5) return false;
    }
    return true
}

console.log(x());

我的问题是:

  • 当返回 'false' 时,for 循环为什么会短路?我查看了 MDN,但没有关于使用 'false' 来跳出 for 循环的内容。还尝试查看 ECMA 规范,但遗憾的是太菜鸟。

  • 为什么函数不向控制台返回“true”,因为在“for”循环执行后存在“return true”语句?即使 false 以某种方式返回 'first','true' 不应该最后返回还是返回?

【问题讨论】:

  • return 语句将强制将控制权从调用当前函数的当前函数返回...所以在这种情况下,它将退出循环并返回 false 到来电者
  • 如果我可以给所有回答的人提供声誉或积分或其他任何东西,我会的。这一切都为我清除了,谢谢你们!

标签: javascript for-loop break boolean-expression


【解决方案1】:

return false 不会破坏你的循环,而是将控制权返回到外部。

function x() {
    for (var i = 0; i < 10; i++) {
        console.log(i);
        if (i == 5) return false;
    }
    return true
}

console.log(x())

输出:

0
1
2
3
4
5
false //here returning false and control also 

break 将打破你的循环而不是从函数中出来。

function x() {
    for (var i = 0; i < 10; i++) {
        console.log(i);
        if (i == 5) break;
    }
    return true
}

console.log(x())

将输出:

0
1
2
3
4
5 //after this loop is breaking and ouputing true
true 

【讨论】:

    【解决方案2】:

    return 语句结束了函数,因此 return true 行是无法到达的。希望有帮助。

    【讨论】:

      【解决方案3】:

      下面的代码显然记录值 1 到 5,然后从 'for' 循环,因为返回的是 'false' 值。

      错了,它跳出for循环是因为return,而不是因为false。你可以写return x 具有相同的效果。重点是,return 立即退出封闭的function,无论当前正在执行什么循环或条件。

      【讨论】:

        【解决方案4】:

        直到 10 点才会执行循环。一旦 i 等于 5,return false 将把控制权返回给函数 x 的调用者。return true 行无法访问。
        这是你的代码

        function x() {
            for (var i = 0; i < 10; i++) {
                console.log(i);
                if (i == 5) return false;
            }
            return true
        }
        
        console.log(x());
        

        输出:-

         0
         1
         2
         3
         4
         5
         false
        

        如果您希望它到达 return true 语句,您可能需要执行一些操作,例如在 for 循环中添加 break 而不是 return false

        for (var i = 0; i < 10; i++) {
                    console.log(i);
                    if (i == 5) break;//this will put it outside for loop
                }
        

        【讨论】:

          【解决方案5】:

          如果您不想弄乱 return 或 break 语句,您可以只添加一个布尔标志。在我的示例中,我使用 isFound 标志运行循环,直到满足您的要求或数组结束。

          const arr = [1,2,3,4,5];
          
          for(let i = 0, isFound; !isFound; i++){
            if(i >= 3 || i >= arr.length){isFound = true;}
            else { console.log(arr[i]);}
          }
          

          所以输出将是:

          1
          2 
          3 
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-03-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-02-28
            • 2014-08-22
            相关资源
            最近更新 更多