我读到回调是在其余逻辑完成后触发的函数,如下所示:
function withCallback(argument, callback) {
doSomethingWithParams(argument);
callback():
}
但据我所知,这些回调都需要声明,没有通用的方法可以每次将回调放在您想要的地方?我想我的问题是:回调在技术上是特殊的,还是只是在另一个函数末尾声明和执行的函数的常规名称?
最佳答案
回调没有什么特别的;它们只是函数(在 JavaScript 中)。术语“回调”用于指示调用者提供的函数在某个适当的时间被回调,该时间由接受回调的对象定义。即使如此,我们也不总是使用术语“回调”。例如,事件处理程序是回调,但我们很少这样调用它们。
...as far as i can tell these callbacks need to be declared all the same...
一点也不。 XMLHttpRequest
的 onreadystatechange
回调不接收任何参数,但 Array#sort
回调接收两个参数,而 Array#forEach
接收三个(尽管人们通常只使用其中一两个)。他们都是不同的。并非所有回调都必须内联定义,而且通常情况下并非如此。因此它们的声明方式并不相同。
据我所知,回调有三种常见的“标准”形式:
DOM 事件处理程序:调用时,它们接收一个事件对象作为第一个参数,在正常情况下,
this
将设置为注册处理程序的元素。它的返回值在标准形式 (addEventListener
) 中被忽略,但被其他人用于某些用途(请参阅我的帖子: The true story ofreturn false
)。Promise 回调有两种形式:
promise执行器,这是您传递
new Promise
的函数,它接收两个参数:用于解析项目的函数和函数用于拒绝它。
<then
和catch
回调,它接收(在标准实现中)一个参数,该参数是发生的解析值或错误。回调的返回值确定通过调用then
或catch
创建的 Promise,并且从它们中的任何一个抛出错误都会拒绝该 Promise。
Node.js 风格的 API 回调:这些回调接收错误或
null
作为其第一个参数,如果null
则后跟零个或多个非错误值作为第一个参数传递。
可能还有其他。
关于javascript - 'callbacks' 只是一个命名约定吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50962494/