为什么这段代码不返回 false

Why this code doesn't return false?

本文关键字:返回 false 代码 段代码 为什么      更新时间:2023-09-26
function every(array, predictate){
    array.forEach(function(x){
    if (!predictate(x))
        {
        return false;
        }
    });
    return true;
}

console.log(every([NaN, NaN, NaN], isNaN));
//true
console.log(every([NaN, NaN, 4], isNaN));
//suppose to return false, but still return true...

第二个console.log应返回 false,但它返回 true。我做错了什么?

return false是返回forEach中使用的匿名函数。所以它不会为every返回任何内容.如果你想使用 forEach 并返回 false,你必须这样做:

function every(array, predictate) {
    var result = true;
    array.forEach(function(x) {
        if (!predictate(x)) {
            result = false;
        }
    });
    return result;
}

您的return false语句适用于forEach回调函数,而不是外部every

every将始终返回 true,除非您将其更改为以下内容:

function every(array, predictate){
    var retValue = true;
    array.forEach(function(x){
    if (!predictate(x))
        {
        retValue = false;
        }
    });
    return retValue;
}