我读了一些关于回调的定义,在FCC上,它指出:
“回调是将函数滑入或传递到另一个函数以决定该函数调用的函数。”
现在,这造成了一些混乱,因为下面的prepareTea()将限定为回调:
const prepareTea = () => 'greenTea';
const getTea = (numOfCups) => {
const teaCups = [];
for (let cups = 1; cups <= numOfCups; cups += 1) {
const teaCup = prepareTea();
teaCups.push(teaCup);
}
return teaCups;
};但据我所知,作为一个回调,它需要作为arg传递进来。
你能澄清一下吗?
谢谢
发布于 2019-12-10 16:55:36
回调是一个函数,它作为参数传递到另一个函数,以便稍后执行。
当您查看ECMAScript规范时,您将看到参数名是callbackFn,它将函数作为参数。
您的代码没有使用任何回调函数,但我们可以将其转换为一起使用。
const prepareTea = () => 'greenTea';
const getTea = (numOfCups, callbackFn) => {
const teaCups = [];
for (let cups = 1; cups <= numOfCups; cups += 1) {
const teaCup = prepareTea();
teaCups.push(teaCup);
}
console.log('Created cups');
callbackFn(teaCups);
};
const callbackFunction = cups => {
console.log('Number of cups', cups.length);
}
getTea(4, callbackFunction); // Pass callbackFunction as an argument to getTea我们使用callbackFunction作为回调。我们将其定义为正则函数,但将其用作回调。因此,这意味着我们可以使用任何函数作为回调。
为什么不使用prepareTea作为回调?
因为您直接使用它的返回值。如果您的prepareTea函数定义如下:
const prepareTea = cb => cb('greenTea');您可以将此函数用作:
prepareTea(tea => teaCups.push(tea));然后,您可以说您使用了prepareTea函数作为回调。
发布于 2019-12-11 10:12:43
“回调”这个词有点模糊。让我们用更精确的语义来看两个相关术语:
高阶函数
HOF至少有一个函数参数。在Javascript中,这个术语也用于返回另一个函数的函数,但这并不常见。
延续
在语言级别上没有连续的语言中的延续总是由连续传递样式编码的。CPS函数将延续k作为其最后一个参数,并使用其结果值调用k,即CPS函数不返回结果,而是将其传递给它的延续。
结论
回调函数显然是一个高阶函数。它也是一个CPS函数,但它没有将延续作为其最后一个参数的约束。
https://stackoverflow.com/questions/59271874
复制相似问题