我被问到一个有趣的问题,关于包含异步函数的函数的调用堆栈。
以下是一个例子:
function test(a)
{
call_server(“www.awebsite.com/api”, a, callback);//async
}
调用堆栈是什么样的?我的理解是: 推(测试) 推(a)中 推(call_server)
然后: POP(call_server) POP(一) 弹出(测试)
但我的问题是“call_server”回调的位置在哪里。什么时候被触发并在堆栈中获得分配的空间。
由于
答案 0 :(得分:0)
鉴于信息不足和观察:
callback
被推送到function test
的堆栈帧以传递给call_server
函数,或者它正在寄存器中传递。这取决于调用约定。callback
既未在function test
的范围内定义,也未传递给函数,因此我假设它是在外部定义的。callback
可能是回调函数定义的指针或某种引用。call_server
在其异步线程本地存储或键控内存位置中捕获callback
的引用或指针,这是不合理的。callback
函数。callback
(可能是一个函数)建立了它自己的堆栈框架,无论它做什么。