【问题标题】:stack size and callbacks in javascriptjavascript中的堆栈大小和回调
【发布时间】:2011-05-06 04:26:02
【问题描述】:

带有回调的异步操作会增加堆栈大小吗?我没有足够的 javascript 解释器知识或正确的工具来解决这个问题。我的 goto 工具是 firebug 控制台,它显示堆栈大小没有增加,但我可能看错了。那么有人知道吗?

【问题讨论】:

    标签: javascript callback stack


    【解决方案1】:

    异步回调,就像事件回调一样,通过事件循环一个接一个地运行。它不是从将它放入事件循环的函数的同一个调用堆栈中调用的,因为循环中的每个函数在调用下一个函数之前都会运行到完成。所以不,它们不会增加堆栈大小。

    【讨论】:

      【解决方案2】:

      我相信现代浏览器中的所有 javascript 引擎都是单线程的,这意味着在当前执行路径结束之前,回调实际上不会发生。这将意味着堆栈已完全展开,并且(基本上)新堆栈将发生回调。

      堆栈大小只会在您调用函数或声明局部变量时增加。当您离开导致增加的作用域时,堆栈的大小将再次减小。

      如果您对整体内存使用更感兴趣,那么它会稍微复杂一些。

      回调在执行之前会占用一些内存,但是一旦回调完成,javascript 引擎应该自行清理。如果您将新数据放在堆上(例如通过全局变量),那么该内存将不会被释放,因为在回调之后它仍将被使用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-26
        • 2020-04-24
        • 2019-05-21
        • 1970-01-01
        • 2013-08-23
        • 2017-06-26
        • 2021-03-26
        • 1970-01-01
        相关资源
        最近更新 更多