目前正在学习回调在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?
发布于 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();
发布于 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() {};
https://stackoverflow.com/questions/51910839
复制相似问题