为什么此ES6功能在“返回”后仍能正常工作?

时间:2020-06-01 23:48:40

标签: javascript function ecmascript-6

我正在尝试创建一个简单的函数,以检查数组中的所有项目是否都按顺序排列,但这给了我一些不良行为。我想出了这个:

const isArrayInOrder = (array) => {
  let lowNum = Number.NEGATIVE_INFINITY;
  array.forEach((element, index) => {
    if (element < lowNum) {
      console.log("False");
      return false;
    }

    lowNum = element;
  });
  console.log("True!");
  return true;
};

let testArray = [1, 2, 3, 4, 7, 11, 22, 31, 800];
isArrayInOrder(testArray);

let testArray2 = [-800, -30, -5, 0, 10, 55, 200, 2000, 1999];
isArrayInOrder(testArray2);

按预期,用isArrayInOrder()调用testArray返回true

isArrayInOrder()调用testArray2会返回false,但随后继续意外地执行了函数底部的console.log("True!")命令。

在我看来,一旦return false被击中,它应该是函数的结尾,对吗?那么如何使它进入第二console.log?

1 个答案:

答案 0 :(得分:1)

您需要了解return将返回内部函数。

因此,如果您这样做:

const outerFunction = () => {
    const innerFunction = () => {
        return 'inner';
    }

    console.log(innerFunction()); // outputs 'inner';

     return 'outer';
}

console.log(outerFunction()); // outputs 'outer';

您要寻找的是Array.prototype.every()

const isArrayInOrder = (array) => {
  let lowNum = Number.NEGATIVE_INFINITY;
  return array.every((element, index) => {
    if (element < lowNum) {
      return false;
    } else {
      lowNum = element;
      return true;
    }
  });
};