为什么这样做(JavaScript)?

为什么这样做(JavaScript)?,javascript,arrays,for-loop,Javascript,Arrays,For Loop,我在做我的一个项目,必须检查同一索引下两个数组(长度相同)中的坐标是否完全相同。我知道有几个方法可以做到这一点,但我遇到了一个开始引起我好奇心的方法。它为什么有效? 这是一个语法- exports.check = (arr1, arr2) => { for(var i = arr1.length; i--;) { if(arr1[i] !== arr2[i]) return true; //If none of the points are the same

我在做我的一个项目,必须检查同一索引下两个数组(长度相同)中的坐标是否完全相同。我知道有几个方法可以做到这一点,但我遇到了一个开始引起我好奇心的方法。它为什么有效? 这是一个语法-

 exports.check = (arr1, arr2) => {
  for(var i = arr1.length; i--;) {
    if(arr1[i] !== arr2[i])
        return true; //If none of the points are the same
  }return false; //If some of the points are the same
}

据我所知,return语句应该停止/中断循环,并在任何情况下返回第一个值。对与否。但它不。。。有人能解释一下我遗漏了什么吗?

如果出现
块,您可能会对
的显示方式感到困惑。如果
if
检查后的结果是一行,则可以避免使用括号。它仅在存在不匹配时返回true

这:

同:

 exports.check = (arr1, arr2) => {
  for(var i = arr1.length; i--;) {
    if(arr1[i] !== arr2[i]) {
        return true; 
    }
  }
 return false; 
}

注:代码中的注释是错误的,代码也是错误的。这只是为了解释关于
if
块的问题,如果这样呈现,可能更容易理解:

//returns true if arrays differ or false if arrays are same
exports.arraysAreDifferent = (arr1, arr2) =>
{
  for(var i = arr1.length; i>=0; i--) {
    if(arr1[i] !== arr2[i]){
        return true; //if even one pair of array values differ, arrays are different 
    } else {
      //do nothing/check next pair 
    }
  }

  return false; //Loop finished without finding difference. Arrays are same
}

这些评论有点误导,在关闭循环的少女括号之后的缩进/括号/放置返回false可能是一个令人困惑的阅读,使它看起来像是“IfX然后返回这个else返回那个”,因此您可能已经思考了循环如何运行到完成。它运行是因为没有其他东西;如果if测试总是失败,则循环将在每对中运行

如果其中任何一对在同一位置不相等,则会中断循环。在那里有一个if块,一旦发现不匹配,它将返回true。代码中的注释是错误的。如果任何值不相同,则返回true;如果所有值都相同,则返回False。为什么您希望它在第一次迭代时已经中断?“在任何情况下都返回第一个值”-呃?这段代码在第一次遇到一对不同的数组值时返回true,或者如果数组的迭代运行到结束时没有找到差异,则返回false Yeah:D。我刚刚意识到if语句后面的第一个括号是循环的结束括号,而不是if语句。哈哈。谢谢你们让我大开眼界:在发布问题后,我需要在这里批准答案。我会的!
//returns true if arrays differ or false if arrays are same
exports.arraysAreDifferent = (arr1, arr2) =>
{
  for(var i = arr1.length; i>=0; i--) {
    if(arr1[i] !== arr2[i]){
        return true; //if even one pair of array values differ, arrays are different 
    } else {
      //do nothing/check next pair 
    }
  }

  return false; //Loop finished without finding difference. Arrays are same
}