浏览器JavaScript堆栈大小限制

我得到一些客户端JavaScript堆栈溢出问题特别是在IE浏览器,
这是发生在第三方库中进行一些函数调用,由于某些原因,他们偶尔刹车在IE只是由于它的低堆栈限制。

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

<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>

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

我想知道如果有一个方法来绑定堆栈溢出异常与Javascript函数,在IE或任何其他浏览器的运行时引发它,如果它可以给堆栈跟踪堆栈中的函数链的时刻错误。

最佳答案
使用a simple test

var i=0;
function inc() {
    i++;
    inc();
}
inc();

IE浏览器

> IE6:1130
> IE7:2553
> IE8:1475
> IE9:20678
> IE10:20677

火狐浏览器

> 3.6:3000
> 4.0:9015
> 5.0:9015
> 6.0:9015
> 7.0:65533
> 8b3:63485
> 17:50762
> 18:52596
> 19:52458
> 42:281810

谷歌浏览器

> 14:26177
> 15:26168
> 16:26166
> 25:25090
> 47:20878
> 51:41753

苹果浏览器

> 4:52426
> 5:65534
> 9:63444

歌剧

> 10.10:9999
> 10.62:32631
> 11:32631
> 12:32631

关于您的问题,请使用浏览器的开发人员工具查看堆叠。在IE 8中,单击F12,转到脚本选项卡,然后单击开始调试。它会在抛出异常时中断,您可以看到调用堆栈。您也可以使用Chrome的开发人员工具Ctrl Shift J.

转载注明原文:浏览器JavaScript堆栈大小限制 - 代码日志