排查 IE 中的 Javascript 堆栈溢出问题
Javascript 中的堆栈溢出错误可能会令人沮丧,尤其是在第三方库中遇到不可预测的行为时。众所周知,与其他浏览器相比,IE 浏览器的堆栈限制较低,正如一个简单的测试脚本所证明的那样,该脚本显示 IE8 中的堆栈限制约为 3200。
要识别堆栈溢出的来源,必须进行跟踪导致异常的函数调用链。不幸的是,JavaScript 不提供对详细堆栈跟踪的本机支持,因此很难查明罪魁祸首函数。但是,有一些技术可以获取有关引发异常的函数的有限信息。
一种方法涉及修改测试脚本以计算触发堆栈溢出之前调用递归函数的次数。通过手动增加 catch 块中的计数,我们可以估计当前浏览器的最大堆栈深度:
<code class="js">var i = 0; function inc() { i++; inc(); } try { inc(); } catch(e) { // The StackOverflow sandbox adds one frame that is not being counted by this code // Incrementing once manually i++; console.log('Maximum stack size is', i, 'in your current browser'); }</code>
此方法提供了发生溢出的堆栈深度的粗略近似值。需要注意的是,由于内部优化和配置的原因,不同的浏览器报告的堆栈深度可能略有不同。
以上是如何识别和排除 IE 中的 Javascript 堆栈溢出错误?的详细内容。更多信息请关注PHP中文网其他相关文章!