0

这是我在 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 词汇表,所有值都是真实的,除非它们被定义为虚假)?为什么会这样,因为我在最终数组中定义了回调函数?事实上,如果我尝试剥离它,它会返回错误:“回调不是函数”。你能证实吗?我希望我以一种有意义的方式发布我的问题,在此先感谢!

4

2 回答 2

0

条件callback(array[i])验证isEven()作为传递的函数的值是否callback评估为true/falsefor 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,并在控制台中打印。False值被忽略。

于 2018-04-06T10:01:55.440 回答
0

语法

if(callback(parameters))

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

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

于 2018-04-06T10:02:51.367 回答