这是我在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;。你能证实吗?
我希望我能以有意义的方式发布我的问题,提前谢谢!
答案 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()
)