有人问我一个关于包含异步函数的函数的调用堆栈的有趣问题。
这是一个例子:
function test(a)
{
call_server(“www.awebsite.com/api”, a, callback);//async
}
调用堆栈是什么样的?我的理解是: 推送(测试) 推(一) 推送(呼叫服务器)
然后: 弹出(呼叫服务器) 流行音乐(一) 流行(测试)
但是我的问题是“call_server”回调的位置在哪里。它什么时候被触发并在堆栈中分配空间。
鉴于信息不足并通过观察:
callback
被压入 function test
的堆栈帧以传递给 call_server
函数,或者正在寄存器中传递。这取决于调用约定。callback
既没有在 function test
的范围内定义,也没有传递到函数中,所以我假设它是在外部定义的。callback
很可能是回调函数定义的指针或某种引用。call_server
捕获对 callback
的异步线程本地存储或键控内存位置中的引用或指针。callback
函数。callback
(可能是一个函数)建立它自己的堆栈框架来执行它所做的任何事情。