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

Callback function with a truthy value in JavaScript

这是我在 Whosebug 上的第一个 post,如果您能帮助我在概念层面上阐明以下 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 词汇表,所有值都是真实的,除非它们被定义为虚假)?为什么会这样,因为我在定义后在最终数组中添加了回调函数?事实上,如果我尝试将其剥离,它会 returns 错误:"callback is not a function"。你能证实吗? 我希望我 post 以有意义的方式回答了我的问题,在此先感谢!

条件 callback(array[i]) 验证作为 callback 传递的 isEven() 函数的值对于 array[i] 的计算结果是否为 true/false

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,并在控制台中打印出来。 False 值被忽略。

语法

if(callback(parameters))

检查 callback(parameters) returns 是否为真实值。在您的情况下,对于偶数,您的函数 returns true 当然是真实的。

此外,如果您在调用 findEven 时从参数中删除回调函数,则 callback 的值将为 undefined。然后尝试像 callback(array[i]) 那样调用它会给出该错误,因为 undefined 不可调用(你不能做 undefined()