[英]How the callback is executed in this function?
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
回调是创建它的上下文中的闭包¹,这意味着即使在getData
返回之后它也可以访问cb
。 所以当浏览器的定时器调用回调时,回调可以调用cb
。 对cb
的调用使用对象字面量来创建要传递给cb
的对象。
在对getData
的调用中,作者将一个函数作为cb
传递来记录它接收到的数据。
所以:
getData
被调用,传入一个函数来记录它得到的参数。
getData
调用setTimeout
以在大约 100 毫秒内安排回调,并传入另一个函数供计时器调用。
getData
返回。
大约 100 毫秒后,浏览器的计时器子系统触发对传递给setTimeout
的回调的调用。
该回调创建一个对象并调用cb
,将对象传递给它。
该回调(传递给getData
回调)记录它接收到的data
对象。
为了理解代码,您可以通过命名匿名函数来简化它。 一个例子可能是:
function logData(data) {
console.log(data);
}
const getData = (cb) => {
// `cb` is `logData` function when `getData` is called
function timeoutCallback() {
var data = { data: ['there', 'is', 'stuff', 'here'] };
cb(data);
}
setTimeout(timeoutCallback, 100)
}
getData(logData);
那有意义吗?
1- 创建第一个全局执行上下文 2- 将调用获取数据函数,然后它将在事件循环内等待 10 秒,然后它将进入执行上下文并打印到控制台。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.