包含异步函数的函数的堆栈

时间:2017-01-22 17:52:03

标签: javascript asynchronous compiler-construction

我被问到一个有趣的问题,关于包含异步函数的函数的调用堆栈。

以下是一个例子:

function test(a)
{
    call_server(“www.awebsite.com/api”, a, callback);//async
}

调用堆栈是什么样的?我的理解是: 推(测试) 推(a)中 推(call_server)

然后: POP(call_server) POP(一) 弹出(测试)

但我的问题是“call_server”回调的位置在哪里。什么时候被触发并在堆栈中获得分配的空间。

由于

1 个答案:

答案 0 :(得分:0)

鉴于信息不足和观察:

  1. callback被推送到function test的堆栈帧以传递给call_server函数,或者它正在寄存器中传递。这取决于调用约定。
  2. callback既未在function test的范围内定义,也未传递给函数,因此我假设它是在外部定义的。
  3. callback可能是回调函数定义的指针或某种引用。
  4. 可以合理地看到,call_server在其异步线程本地存储或键控内存位置中捕获callback的引用或指针,这是不合理的。
  5. 当异步调用完成后,它会调用异步堆栈帧上下文中的callback函数。
  6. 最后,callback(可能是一个函数)建立了它自己的堆栈框架,无论它做什么。