包含异步函数的函数堆栈

问题描述 投票:0回答:1

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

这是一个例子:

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

调用堆栈是什么样的?我的理解是: 推送(测试) 推(一) 推送(呼叫服务器)

然后: 弹出(呼叫服务器) 流行音乐(一) 流行(测试)

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

javascript asynchronous callstack
1个回答
0
投票

鉴于信息不足并通过观察:

  1. callback
    被压入
    function test
    的堆栈帧以传递给
    call_server
    函数,或者正在寄存器中传递。这取决于调用约定。
  2. callback
    既没有在
    function test
    的范围内定义,也没有传递到函数中,所以我假设它是在外部定义的。
  3. callback
    很可能是回调函数定义的指针或某种引用。
  4. 在看不见的情况下,可以合理地认为
    call_server
    捕获对
    callback
    的异步线程本地存储或键控内存位置中的引用或指针。
  5. 当异步调用完成时,它会调用异步堆栈帧上下文中的
    callback
    函数。
  6. 最后,
    callback
    (可能是一个函数)建立它自己的堆栈框架来执行它所做的任何事情。
© www.soinside.com 2019 - 2024. All rights reserved.