如果我在一个函数中返回两次,第二个会覆盖第一个吗?

If I return twice in a function, would the second one overwrite the first one?

本文关键字:第二个 两次 覆盖 第一个 返回 一个 如果 函数      更新时间:2023-09-26

我正在用Javascript写一个函数。基本上,如果数组的第一个元素中的字符串包含数组的第二个元素中的字符串的所有字母,它应该返回true。我正在测试输入["hello","hey"]

上的函数
    function mutation(arr) {
      var string1 = arr[0].toLowerCase();
      var array=[];
      for (i=0;i<=string1.length-1;i++) {
        array[i]=string1[i];
      }
      var string2 = arr[1].toLowerCase();
      var result = true;
      label:
      for(i=0;i<string2.length;i++) {
        if (array.indexOf(string2[i]) == -1) {
          result = false;
          break label;
        }
        else {
          result = true;
        }
      }
      return result;
    }

这将给我正确的结果false。但是,如果我以不同的方式编写循环,那么它将给我true

  label:
  for(i=0;i<string2.length;i++) {
    if (array.indexOf(string2[i]) == -1) {
      return false;
      break label;
    }
    else {
      return true;
    }
  }

我在第二个方法中哪里做错了?

return语句立即终止函数。在第二个实现中,早期返回false确实是正确的,但是return true语句是错误的——如果第一个元素不包含在第二个数组中,它将返回true。实际上,您是在对循环求反——只检查第一个元素,并立即返回一个值。

您在这里的目的是只返回false值:

for (i = 0; i < string2.length; i++) {
    if (array.indexOf(string2[i]) == -1) {
      return false;
    }
}
// If we finished the loop and haven't returned false, the return value is true:
return true;

第二个方法在这里中断:

return true

当返回值为正匹配时,FOR循环终止。

在初始版本中,因为它只设置result = true,所以FOR循环继续,直到遇到FALSE,然后显式BREAK发生。

然而,在另一个版本中,if语句将遇到RETURN FALSERETURN TRUE,它将只迭代一次,返回结果并结束FOR循环。

在您的第一种情况下,逻辑被退出并返回值false,只要它满足您的情况中的条件(array.indexOf(string2[i]) == -1)

在第二种情况下,数组的第一个元素不满足条件,落入else条件,因此退出,返回true

相关文章: