栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

递归调用异步函数

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

递归调用异步函数

问题是堆栈是否充满了调用,并可能在某些时候导致堆栈溢出?

否。 如果

asyncBar()
调用回调是异步传递的,则不会堆积堆栈。

在您的代码中:

function foo() {    asyncBar(foo);}

这是逐步发生的事情:

  1. 首先
    foo()
    被称为。
  2. 然后调用
    asyncBar(foo)
  3. 因为
    asyncBar
    是异步的,所以这意味着它将启动一个异步操作(假设它是一个http GET,但是任何异步操作都可以)。该异步操作已启动,但随后
    asyncBar()
    立即返回。
  4. 最初的return调用
    foo()
    和堆栈已完全展开。
    foo()
    堆栈上再也没有了。
  5. 调用之后的任何代码将
    foo()
    继续运行,直到完成为止,并返回到事件循环。
  6. 同时,异步操作将在将来的某个时间完成。这会将对您的回调的调用放在事件队列中。
  7. 当JS引擎执行完其他Javascript(这意味着堆栈完全为空)后,它将把该事件从事件队列中拉出并调用回调。
  8. 在这种情况下,回调函数就是
    foo
    这样,它将调用该函数并重新开始循环,直接回到步骤2。

没有堆栈堆积。关键是异步回调在当前堆栈完成之后的某个时候被调用,然后展开并返回系统。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/387501.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号