【问题标题】:Where do I place my return true statement我在哪里放置我的回报真实声明
【发布时间】:2020-03-14 21:29:20
【问题描述】:

这是一个基本的 javascript 问题,我只是想更好地理解。我试图了解我将返回真实声明放在哪里是否重要。下面是示例代码:

function isValid(input) {
    for (var i = 0; i < input.length - 2; i++) {
        var charOne = input.charAt(i);
        var charTwo = input.charAt(i + 1);
        var charThree = input.charAt(i + 2);

        if (charOne === charTwo && charOne === charThree) {
            return false;
        }
        return true;
    }

}

isValid("ABB");

这会返回 true,但如果我将 return true 语句放在这里,也会返回 true:

function isValid(input) {
    for (var i = 0; i < input.length - 2; i++) {
        var charOne = input.charAt(i);
        var charTwo = input.charAt(i + 1);
        var charThree = input.charAt(i + 2);

        if (charOne === charTwo && charOne === charThree) {
            return false;
        }
    }
    return true; // Moved this return statement
}

isValid("ABB");

一种方式错误,另一种方式正确吗?

【问题讨论】:

  • 当然很重要; return 语句的两个位置导致完全不同的程序。首先,for 循环保证在第一次迭代期间退出。第二个将处理i 的每个值,直到满足条件或循环条件失败。尝试使用输入 "ABCCC" 运行每个版本的函数

标签: javascript function boolean


【解决方案1】:

您的第一个版本,您在 for 循环中返回 true。这意味着它只会执行一次循环然后返回。这很可能是一个错误。

您的第二个版本可能是正确的。在for循环完成来自[i..length-2)的所有迭代后,从函数中执行return true语句。

【讨论】:

    【解决方案2】:

    第二个,因为在每次迭代后的第一个中,您检查字符是否相等,它会在第一次迭代本身中 return falsereturn true。在第二个中,您检查所有组合,如果它永远不会false 那么它一定是 true。

    【讨论】:

      【解决方案3】:

      当你在 for 循环中 return 时,你完成了整个循环并在它之外继续。

      所以答案取决于,如果您想错过一个项目并在 return 语句之后继续循环,那么执行 return 不是您想要的。

      你放在循环之外的 return 允许循环在返回结果之前完成。

      注意如果您想完成迭代而不是破坏整个循环,您可以在循环中使用一个有用的关键字continue

      https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/continue

      【讨论】:

        【解决方案4】:

        我不认为一个人一定是错的。我实际上更喜欢稍微不同的方法。 为了清楚起见,我通常会做这样的事情。所以它显然是其中之一。 使用 return 很明显,函数内的计算在该点停止。我只是喜欢它看起来很明显。

                if(charOne === charTwo && charOne === charThree) {
                  return false;
                } {
                  return true;
                }
        

        【讨论】:

          最近更新 更多