javascript 回调 参数-JavaScript 中的反弹函数有哪些?

2023-09-02 0 6,619 百度已收录

在 JavaScript 中,反弹函数是作为参数传递的函数。 函数A作为参数(函数引用)传递给另一个函数B,但是这个函数B执行函数A。函数A称为反弹函数; 如果没有名称(函数表达式),则称为匿名反弹函数。

本教程的运行环境:windows7系统,javascript1.8.5版本,DellG3笔记本。

什么是反弹函数(回调

在 JavaScript 中,函数就是对象。 为此,函数可以将函数作为参数,并且可以由其他函数返回。 执行此操作的函数称为高阶函数。 任何作为参数传递的函数都称为反弹函数。

反弹函数的具体定义是:函数A作为参数(函数引用)传递给另一个函数B,但是这个函数B执行函数A。假设函数A称为反弹函数。 如果没有名称(函数表达式),则称为匿名反弹函数。

为什么我们需要反弹?

有一个非常重要的原因 - JavaScript 是一种风暴驱动的语言。 这意味着 JavaScript 将在侦听其他事件的同时继续执行,而不是继续等待响应。 让我们看一个基本的例子:

function first(){
  console.log(1);
}
function second(){
  console.log(2);
}
first();
second();

登录后复制

正如您所期望的,第一个函数被执行,第二个函数随后被执行,并将以下内容记录到控制台:

// 1
// 2

登录后复制

到目前为止,一切都很好。

但是,如果函数包含无法立即执行的单独代码怎么办? 例如,API请求我们必须先发送请求然后等待响应? 为了模拟此操作,将使用 setTimeout,这是一个 JavaScript 函数,将在设定时间后调用。 我们将函数延迟 500 微秒来模拟 API 请求。 我们的新代码将如下所示:

function first(){
  // Simulate a code delay
  setTimeout( function(){
    console.log(1);
  }, 500 );
}
function second(){
  console.log(2);
}
first();
second();

登录后复制

现在了解 setTimeout() 的工作原理并不重要。 重要的是,您看到我们将 console.log(1) 移动到了 500 微秒的延迟范围内。 那么,当我们调用函数时会发生什么呢?

first();
second();
// 2
// 1

登录后复制

虽然我们首先调用了first()函数,但我们调用了second()函数,然后复制了它的结果。

这并不是说 JavaScript 没有按照我们想要的顺序执行函数,而是 JavaScript 在继续执行 secondary() 之前没有等待first() 的响应。

那你为什么要展示这个? 因为您不能一个接一个地调用函数并期望它们以正确的顺序执行。 弹跳是一种确保单个代码在其他代码完成执行之前不会执行的方法。

创建弹跳函数

好吧,话不多说,让我们创建一个弹跳!

首先,打开 Chrome 开发者控制台(Windows:Ctrl+Shift+J)(Mac:Cmd+Option+J),然后在控制台中键入以下函数声明:

function doHomework(subject) {
  alert(`Starting my ${subject} homework.`);
}

登录后复制

现在让我们添加bounce——作为doHomework()函数中的最后一个参数,我们可以传入bounce。 然后在调用 doHomework() 的第二个参数中定义弹跳函数。

function doHomework(subject, callback) {
  alert(`Starting my ${subject} homework.`);
  callback();
}
doHomework('math', function() {
  alert('Finished my homework');
});

登录后复制

如您所见,如果您在控制台中输入上述代码,您将收到两个警报:“startinghomework”警报,然后是“finishedhomework”警报。

然而javascript 回调 参数,并不总是需要在我们的函数调用中定义反弹函数。 它们可以在我们的代码中的其他地方定义,如下所示:

function doHomework(subject, callback) {
  alert(`Starting my ${subject} homework.`);
  callback();
}
function alertFinished(){
  alert('Finished my homework');
}
doHomework('math', alertFinished);

登录后复制

javascript 回调 参数-JavaScript 中的反弹函数有哪些?

该示例的结果与上面的示例完全相同,只是设置略有不同。 我们可以看到,在 doHomework() 函数调用期间,我们将alertFinished 函数定义作为参数传递。

一个真实的案例

我们尝试调用Twitter的API。 向 API 发出请求时,您必须等待响应,然后才能对该响应采取操作。 这是真正反弹的一个很好的反例。 请求看起来像这样:

T.get('search/tweets', params, function(err, data, response) {
  if(!err){
    // This is where the magic will happen
  } else {
    console.log(err);
  }
})

登录后复制

T.get 表示我们正在向 Twitter 发送 get 请求

此请求中有三个参数:“search/tweets”(这是我们的请求的路由)、params(这是我们的搜索参数)和匿名函数(这是我们的反弹)。

弹跳在这里很重要,因为我们需要等待服务器的响应才能继续执行代码。 我们不知道我们的 API 请求是否会成功,因此在通过 get 请求将参数发送到搜索/推文后,我们等待。 一旦 Twitter 响应,我们的弹跳函数就会被调用。 Twitter 会向我们发送一个错误(error)对象或响应对象。 在弹跳函数中javascript 回调 参数,我们可以使用 if() 语句来确定我们的请求是否成功,然后对新数据采取适当的操作。

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

悟空资源网 javascript javascript 回调 参数-JavaScript 中的反弹函数有哪些? https://www.wkzy.net/game/190232.html

常见问题

相关文章

官方客服团队

为您解决烦忧 - 24小时在线 专业服务