首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如果一个函数在另一个函数中执行,它是否立即被限定为回调函数?

如果一个函数在另一个函数中执行,它是否立即被限定为回调函数?
EN

Stack Overflow用户
提问于 2019-12-10 16:41:18
回答 2查看 70关注 0票数 1

我读了一些关于回调的定义,在FCC上,它指出:

“回调是将函数滑入或传递到另一个函数以决定该函数调用的函数。”

现在,这造成了一些混乱,因为下面的prepareTea()将限定为回调:

代码语言:javascript
复制
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传递进来。

你能澄清一下吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-10 16:55:36

回调是一个函数,它作为参数传递到另一个函数,以便稍后执行。

当您查看ECMAScript规范时,您将看到参数名是callbackFn,它将函数作为参数。

您的代码没有使用任何回调函数,但我们可以将其转换为一起使用。

代码语言:javascript
复制
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函数定义如下:

代码语言:javascript
复制
const prepareTea = cb => cb('greenTea');

您可以将此函数用作:

代码语言:javascript
复制
prepareTea(tea => teaCups.push(tea));

然后,您可以说您使用了prepareTea函数作为回调。

票数 3
EN

Stack Overflow用户

发布于 2019-12-11 10:12:43

“回调”这个词有点模糊。让我们用更精确的语义来看两个相关术语:

高阶函数

HOF至少有一个函数参数。在Javascript中,这个术语也用于返回另一个函数的函数,但这并不常见。

延续

在语言级别上没有连续的语言中的延续总是由连续传递样式编码的。CPS函数将延续k作为其最后一个参数,并使用其结果值调用k,即CPS函数不返回结果,而是将其传递给它的延续。

结论

回调函数显然是一个高阶函数。它也是一个CPS函数,但它没有将延续作为其最后一个参数的约束。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59271874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档