浏览器的Javascript堆栈大小限制

在IE浏览器中,我发现一些客户端的Javascript堆栈溢出问题,这是发生在第三方库内部的一些函数调用,由于某些原因,他们偶尔在IE中制动,因为它的栈限制很低。

然后,我编写了一个小testingHTMLtesting一些浏览器的堆栈大小限制,发现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> 

IE的引发堆栈溢出时,值为3200左右,Firefox和Chrome可以处理一个非常深的recursion,如果比较IE浏览器。

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

使用一个简单的testing :

 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 ,进入“脚本”选项卡,然后单击“开始debugging”。 当抛出一个exception时它会中断,你可以看到调用堆栈。 您也可以使用Chrome的开发者工具Ctrl + Shift + J。

这是浏览器的具体情况,不仅是堆栈大小,还有优化,像尾recursion优化和东西。 我猜这里唯一可靠的事情就是编写代码的方式,不要把大量东西放入堆栈,或者手动testing(深入阅读每个浏览器的文档)。 毕竟,当你看到“太多的recursion”错误或类似的情况时,你已经知道你的代码有些问题。