在JavaScript中具有truthy值的回调函数

时间:2018-04-06 09:55:40

标签: javascript function for-loop callback truthiness

这是我在StackOverflow上的第一篇文章,如果您能帮助我在概念层面澄清以下JavaScript函数中发生的事情,我将不胜感激。所以,我已经练习了一段时间的语言,现在我在功能领域潜水了一点。这是我的困境:

function findEven(array, callback) {
    for (let i = 0; i < array.length; i++) {
        if (callback(array[i])) {
            console.log(array[i]);
        }
    }
}
function isEven(num) {
    return num % 2 === 0;
};
findEven([2, 4, 6, 7, 9, 12], isEven);

现在,我明白这是做什么的,而且我知道我可以通过简单的.forEach()获得相同的结果。但是,我想得到的是条件if (callback(array[i]))正在做什么。是否建立回调函数是否真实(根据MDN术语表,所有值都是真实的,除非它们被定义为假的)?那是为什么呢,因为我在最终数组中定义了回调函数后添加了回调函数?实际上,如果我尝试将其剥离,则会返回错误:&#34;回调不是函数&#34;。你能证实吗? 我希望我能以有意义的方式发布我的问题,提前谢谢!

2 个答案:

答案 0 :(得分:0)

条件callback(array[i])验证isEven()函数的值callback是否评估为true/false的{​​{1}}。

array[i]

如果您打印function findEven(array, callback) { for (let i = 0; i < array.length; i++) { console.log(i, array[i], callback(array[i])); if (callback(array[i])) { console.log(array[i]); } } } function isEven(num) { return num % 2 === 0; }; findEven([2, 4, 6, 7, 9, 12], isEven);语句,您会看到值console.log评估为callback(),在控制台中打印。 true值将被忽略。

答案 1 :(得分:0)

语法

if(callback(parameters))

检查callback(parameters)是否返回一个thruthy值。在你的情况下,对于偶数,你的函数返回true,这当然是真的。

另外,如果您从调用findEven的参数中删除回调函数,则callback的值将为undefined。然后尝试将其称为callback(array[i])将会出现错误,因为undefined无法调用(您无法执行undefined()