【发布时间】:2011-05-06 04:26:02
【问题描述】:
带有回调的异步操作会增加堆栈大小吗?我没有足够的 javascript 解释器知识或正确的工具来解决这个问题。我的 goto 工具是 firebug 控制台,它显示堆栈大小没有增加,但我可能看错了。那么有人知道吗?
【问题讨论】:
标签: javascript callback stack
带有回调的异步操作会增加堆栈大小吗?我没有足够的 javascript 解释器知识或正确的工具来解决这个问题。我的 goto 工具是 firebug 控制台,它显示堆栈大小没有增加,但我可能看错了。那么有人知道吗?
【问题讨论】:
标签: javascript callback stack
异步回调,就像事件回调一样,通过事件循环一个接一个地运行。它不是从将它放入事件循环的函数的同一个调用堆栈中调用的,因为循环中的每个函数在调用下一个函数之前都会运行到完成。所以不,它们不会增加堆栈大小。
【讨论】:
我相信现代浏览器中的所有 javascript 引擎都是单线程的,这意味着在当前执行路径结束之前,回调实际上不会发生。这将意味着堆栈已完全展开,并且(基本上)新堆栈将发生回调。
堆栈大小只会在您调用函数或声明局部变量时增加。当您离开导致增加的作用域时,堆栈的大小将再次减小。
如果您对整体内存使用更感兴趣,那么它会稍微复杂一些。
回调在执行之前会占用一些内存,但是一旦回调完成,javascript 引擎应该自行清理。如果您将新数据放在堆上(例如通过全局变量),那么该内存将不会被释放,因为在回调之后它仍将被使用。
【讨论】: