浏览器Javascript堆栈大小限制

浏览器Javascript堆栈大小限制

我得到一些客户端Javascript堆栈溢出问题,特别是在IE浏览器,这是发生在一个第三方库,作出一些功能调用,出于某些原因,他们偶尔刹车IE只是因为它的低堆栈限制。

然后,我编写了一个小测试HTML来测试某些浏览器的堆栈大小限制,并发现如果与运行在Windows 7操作系统下的笔记本电脑上的FF 7或Chrome 14相比,IE8实际上有一个较小的堆栈限制,即8GB RAM:

<html><body><!-- begin Script: --><script type="text/javascript">function doSomething(){

  var i = 3200;
  doSomethingElse(i);}function doSomethingElse(i){
  if (i == 0) return -1;
  doSomethingElse(i-1);}doSomething(); </script><!-- END OF PAGE --></body></html>

IE在值约为3200时会引发堆栈溢出,与IE相比,Firefox和Chrome可以处理非常深的递归。

我想知道是否有一种方法将堆栈溢出异常与在IE或任何其他浏览器中运行时引发它的Javascript函数绑定,以及在引发错误时,它是否可以使用堆栈中的函数链提供堆栈跟踪。


开心每一天1111
浏览 1510回答 2
2回答

慕勒3428872

使用一个简单的测试:var&nbsp;i=0;function&nbsp;inc()&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;i++; &nbsp;&nbsp;&nbsp;&nbsp;inc();}inc();Internet资源管理器IE6:1130IE7:2553IE8:1475IE9:20678IE10:20677Mozilla Firefox3.6: 30004.0: 90155.0: 90156.0: 90157.0: 655338b3:6348517: 5076218: 5259619: 5245842: 281810谷歌Chrome14: 2617715: 2616816: 2616625: 2509047: 2087851: 41753狩猎4: 524265: 655349: 63444歌剧10.10: 999910.62: 3263111: 3263112: 32631关于您的问题,请使用浏览器的开发工具查看堆栈。在IE8+中,点击F12,转到“脚本”选项卡,然后单击“开始调试”。当抛出异常时,它将中断,您可以看到调用堆栈。你也可以使用Chrome的开发工具,克特+换档+J.

墨色风雨

这是浏览器特有的,不仅是堆栈大小,还包括优化,比如尾递归优化等等。我想这里唯一可靠的方法是以一种不会将大量内容放入堆栈的方式编写代码,或者手动测试(深入了解每个浏览器的文档)。毕竟,当您看到“太多递归”错误或类似的情况时,您已经知道代码确实有问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript