客户端 Javascript 堆栈溢出问题(在 IE 中尤其普遍)可能是由于浏览器的堆栈大小有限而引起的其他浏览器,例如 Firefox 或 Chrome。由于堆栈空间不足,此限制可能会导致函数在执行期间中断。
为了说明堆栈大小限制,请考虑以下代码:
<code class="html"><script type="text/javascript"> function doSomething() { var i = 3200; doSomethingElse(i); } function doSomethingElse(i) { if (i == 0) return -1; doSomethingElse(i - 1); } doSomething(); </script></code>
在 IE 中执行时,此代码会引发i = 3200 左右的堆栈溢出异常,而 Chrome 和 Firefox 等浏览器可以处理更深层次的递归。
要识别导致堆栈溢出的函数并获取堆栈跟踪,可以执行一个简单的测试:
<code class="javascript">var i = 0; function inc() { i++; inc(); } try { inc(); } catch (e) { // Adjust for the StackOverflow sandbox's additional frame i++; console.log('Maximum stack size is', i, 'in your current browser'); }</code>
此测试增量调用 inc 函数,直到发生堆栈溢出。通过记录捕获异常时 i 的值,可以确定最大堆栈大小。
以上是浏览器 JavaScript 堆栈大小限制如何影响函数执行?的详细内容。更多信息请关注PHP中文网其他相关文章!