首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在JavaScript回调中,术语“传递”或“传递”是什么意思?

在JavaScript回调中,术语“传递”或“传递”是什么意思?
EN

Stack Overflow用户
提问于 2018-08-19 00:59:13
回答 2查看 152关注 0票数 0

目前正在学习回调在JavaScript中的含义,我正在努力掌握回调是如何工作的,传递这个或传递那个的术语来自哪里,以及它如何与回调一起工作?我有一些示例代码,我想展示一下,并简要解释为什么我不理解它。

var users = ["Sam", "Ellie", "Bryan"];

function addUser(username, chickenNugget) {
    setTimeout(function() {
      users.push(username);
      chickenNugget();
    }, 200);
}

function getUsers() {
    setTimeout(function() {
      console.log(users);
    }, 100);
}

addUser("Jake", getUsers);

getUsers();

当调用chickenNugget时会发生什么?函数中的代码是否在命中chickenNugget时停止并重置,直到再次调用函数addUser?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-19 01:08:37

回调是在Javascript中处理异步的一种方式。有时你有一些异步函数,它使用setTimeout之类的东西,但你需要等待这些异步函数完成,然后才能继续运行更多的代码(这取决于异步请求),而回调是实现这一点的一种方式。我已经更新了你的例子来说明我上面的意思,希望它能有所帮助:

var users = ["Sam", "Ellie", "Bryan"];

function addUser(username, callback) {
    setTimeout(function() {
      users.push(username);
      // this will be called only after username has been added to users
      callback();
    }, 200);
}

function isJakeInUsers() {
  if (users.includes("Jake")) {
    console.log("Jake is in users! :)");
  } else {
    console.log("Jake is not in users! :(");
  }
}

// as a callback, isJakeInUsers will only be called after "Jake" has been added to users
addUser("Jake", isJakeInUsers);

// this gets called immediately, before "Jake" has been added to users
isJakeInUsers();

票数 1
EN

Stack Overflow用户

发布于 2018-08-19 01:18:31

回调只不过是传递给以后使用的指令。回调是javascript中的基础,因为它是一种异步语言。这意味着如果一个操作需要外部服务,它将执行下一个命令,而不等待该操作完成。

以下是同步执行代码的示例

var total_in_cart = 0;
var shipping = 0;
var total = 0;

total_in_cart = 100; // USD
shipping = 10;
total = total_in_cart + shipping;
console.log(total);

这将输出110,因为它在执行下一行之前等待每一行完成执行。

下面是一个异步执行的代码示例

var total_in_cart = 0;
var shipping = 0;
var total = 0;

total_in_cart = 100; // USD
shipping = get_shipping_fee_from_dhl_api();
total = total_in_cart + shipping;
console.log(total);

这将输出100,因为JS没有等待api调用完成,而是继续执行新行。要解决这个问题,您必须在api请求完成之后发送进一步的指令进行回调,因此出现了回调这个词。

因此,在这种情况下,您必须将所有计算包装到可作为回调可执行文件发送的代码中。在JS中,您将使用一个函数并将其赋值给一个变量,然后将该变量传递给将获取它并执行它的函数。

请记住,

function getUsers() {}

等同于

var getUsers = function() {};
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51910839

复制
相关文章

相似问题

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