首页 > 解决方案 > 如果一个函数在另一个函数内部执行,它会立即成为回调函数吗?

问题描述

我一直在阅读一些关于回调的定义,在 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 传入。

你能澄清一下吗?

谢谢

标签: javascriptfunctioncallbackfunctional-programming

解决方案


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

当您查看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函数作为回调。


推荐阅读