为什么这个 ES6 函数在"返回"后仍然工作?



我正在尝试创建一个简单的函数来检查数组中的所有项目是否都井井有条,但它给了我一些不需要的行为。 我想出了这个:

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

按预期的那样,使用testArray调用isArrayInOrder()会返回true

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

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

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

因此,如果您这样做:

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