这是我正在学习的代码。
let depList : Array<number>;
depList = [1,2,3,4,5,6,7,8,9];
let numResults = depList.filter(num => num > 5); // predicate
console.log(numResults);
let resultFind = depList.find(num => num ==5); // predicate
console.log(resultFind);
let sum = depList.reduce((acc, num) => acc + num); // callback function
console.log(sum);
这里 predicate 和回调函数有什么区别?
我试着通过方法定义,但似乎很难理解的差异。
2条答案
按热度按时间qyyhg6bp1#
有很大的重叠。
“ predicate ”是一个接受参数并返回布尔值的函数。它总是一个布尔值,因为它总是与一些逻辑检查相关。示例
“回调”是任何作为参数传入的函数。它可能是一个 predicate (返回布尔值),也可能不是。
在
.filter()
和.find()
的情况下,它们接受的 callback 是 predicate。一个 predicate 不一定要用作回调函数,回调函数也不一定是一个 predicate ,两者是正交的。
lsmepo6l2#
如上所述, predicate 是一个接受单个参数并返回布尔值的函数。回调是一个传递给另一个函数的函数。
在typescript中, predicate 非常重要,因为它们可以用于类型收缩。例如:
因为 predicate 用
n is number
注解,所以它现在是一个类型 predicate 。这意味着filtered
现在有number[]
类型-类型系统知道所有的null都已经从数组中过滤掉了。