Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我应该把我的返回真语句放在哪里_Javascript_Function_Boolean - Fatal编程技术网

Javascript 我应该把我的返回真语句放在哪里

Javascript 我应该把我的返回真语句放在哪里,javascript,function,boolean,Javascript,Function,Boolean,这是一个基本的javascript问题,我只是想更好地理解。我在努力理解我把return-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

这是一个基本的javascript问题,我只是想更好地理解。我在努力理解我把return-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;
    }

}

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");

一种方法是错误的,另一种方法是正确的吗?

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


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

第二个,因为在每次迭代后的第一个循环中,您检查字符是否相等,它将在第一个迭代中返回false或true。在第二个循环中,您检查所有组合,如果它从不为false,那么它必须为true。

当您在for循环中返回时,您将完成整个循环和car在它的外面

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

您放在循环外部的返回允许循环在返回结果之前完成

请注意,如果希望完成迭代而不是破坏整个循环,则可以在循环内使用一个有用的关键字“继续”


我不认为其中一个必然是错误的。实际上,我更喜欢稍微不同的方法。 为了清楚起见,我通常会这样做,所以很明显,这是一个或另一个。 有了返回,很明显函数中的计算会在该点停止。我只是希望它看起来很明显

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

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