Javascript 如果一个函数是在另一个函数中执行的,它会立即成为回调函数吗?

Javascript 如果一个函数是在另一个函数中执行的,它会立即成为回调函数吗?,javascript,function,callback,functional-programming,Javascript,Function,Callback,Functional Programming,我一直在阅读一些关于回调的定义,在FCC上,它指出: “回调是指滑入或传递到另一个函数中的函数 函数来决定该函数的调用。” 现在,这造成了一些混乱,因为在下面的prepareTea()中,它可以作为回调: const prepareTea = () => 'greenTea'; const getTea = (numOfCups) => { const teaCups = []; for (let cups = 1; cups <= numOfCups; cups

我一直在阅读一些关于回调的定义,在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;
};
const prepareTea=()=>“绿茶”;
常量getTea=(numOfCups)=>{
常量茶杯=[];
对于(让cups=1;cups
回调函数是作为一个函数传递给另一个函数的函数
参数将在以后执行

当您查看时,您将看到参数名是
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
您将此函数用作:

prepareTea(tea => teaCups.push(tea));
然后可以说您使用了
prepareTea
函数作为回调函数

回调函数是作为一个函数传递给另一个函数的函数 参数将在以后执行

当您查看时,您将看到参数名是
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
您将此函数用作:

prepareTea(tea => teaCups.push(tea));

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

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

高阶函数

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

延续

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

结论


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

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

高阶函数

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

延续

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

结论


回调函数显然是一个高阶函数。它也是一个CPS函数,但不受必须将continuation作为其最后一个参数的约束。

这只是接管
prepareTea
函数的闭包。而不是“传入”
getTea
@Tiago据我所知,是的,回调函数是一个作为参数传入的函数。仅仅在另一个函数中调用函数本身并不是一个
callback
好吧,我知道这一点,但后来我读了这篇文章,它让我想……我不知道你读的是什么源代码,但它们是引用的关键部分“sleed或passed”。我不确定“sleed”可能是什么意思,但将该函数直接硬编码到
getTea()
函数中看起来不像是“sleed”或“passed”。
const teaCup=prepareTea();
不是回调,这只是一个普通的函数调用。回调通常处理异步任务,您将要调用的函数传递给该异步任务。您的代码没有传递要调用的函数,并且在某个任务完成后也没有调用它。这只是将闭包接管
prepareTea
函数。不是“传递到”
getTea
@Tiago据我所知,是的,回调函数是一个作为参数传入的函数。仅仅在另一个函数中调用函数本身并不是一个
callback
好吧,我知道这一点,但后来我读了这篇文章,它让我想……我不知道你读的是什么源代码,但它们是引用的关键部分“sleed或passed”。我不确定“sleed”可能是什么意思,但将该函数直接硬编码到
getTea()
函数中看起来不像是“sleed”或“passed”。
const teaCup=prepareTea();
不是回调,这只是一个普通的函数调用。回调通常处理异步任务,您将要调用的函数传递给该异步任务。您的代码没有传递要调用的函数,并且在某个任务完成后也不会调用该函数。“回调函数显然是一个高阶函数。"这句话让人困惑:那么,这两个函数中的哪一个是回调函数?接受传入函数的函数还是接受传入函数的函数?是的,你是对的。我把它弄糊涂了。作为参数传递的函数就是回调函数。在我看来,没有必要为这样的函数指定一个特殊的术语。它是ju它完全取决于高阶函数是否被调用,一次、两次或任意次数。传递函数参数就像传递一个延迟计算的表达式,也就是说,函数和普通数据之间没有区别,只是函数只在需要时才被计算。感谢bob的inpu“回调函数显然是一个高阶函数。”这句话让人困惑:那么这两个函数中哪一个是回调函数?接受回调函数的函数