gpt4 book ai didi

javascript - 这个函数中回调是如何执行的?

转载 作者:行者123 更新时间:2023-11-29 20:35:14 25 4
gpt4 key购买 nike

const getData = (cb) => {  
setTimeout( () => {
cb({ data: ['there', 'is', 'stuff', 'here'] })
}, 100)
}

getData( data => {
console.log(data);
});

这里是 javascript 回调的例子。谁能告诉我这个函数是如何在 javascript 回调中执行的?

getData(cb) 里面的函数是什么?它将如何执行?函数如何在 cb 中作为回调传递并返回到 console.log

问候。

最佳答案

getData 中的函数是传递给 setTimeout 的回调,这是一种安排在未来调用函数的方法。在这种情况下,它要求回调在大约 100 毫秒后发生。 getData 在此之前返回。

setTimeout 回调是对其创建上下文的闭包¹,这意味着即使在 之后它也可以访问 cb getData 已返回。所以当浏览器的定时器调用回调时,回调可以调用cb。对 cb 的调用使用对象字面量来创建要传递给 cb 的对象。

在对 getData 的调用中,作者传递了一个函数作为 cb 来记录它接收到的数据。

所以:

  1. getData 被调用,传入一个函数,该函数将记录它获取的参数。

  2. getData 调用 setTimeout 以在大约 100 毫秒后安排回调,并传入另一个函数供计时器调用。

  3. getData 返回。

  4. 大约 100 毫秒后,浏览器的计时器子系统触发对传递给 setTimeout 的回调的调用。

  5. 该回调创建一个对象并调用 cb,将对象传递给它。

  6. 那个 回调(传递给 getData 的回调)记录它收到的 data 对象。


¹“闭包”——参见:SO , my anemic blog

关于javascript - 这个函数中回调是如何执行的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56904724/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com