为什么这段代码不会返回false?

时间:2016-01-07 12:52:09

标签: javascript foreach

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。我做错了什么?

2 个答案:

答案 0 :(得分:2)

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

function every(array, predictate) {
    var result = true;

    array.forEach(function(x) {
        if (!predictate(x)) {
            result = false;
        }
    });

    return result;
}

答案 1 :(得分:1)

您的return false声明适用于forEach回调功能,不适用于外部every

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

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