文章地址: http://www.zizhujy.com/blog/post/2012/03/18/Uncaught-RangeError-Maximum-call-stack-size-exceeded.aspx

在此,非常感谢该文章作者的分享,本文完全转载自上面链接,此处作为备份,个人查看使用。

一、问题:

今天在做网页时突然碰到这样的JavaScript错误:

Uncaught RangeError: Maximum call stack size exceeded

百思不得其解,千次调试找不到原因。

表面上看,是因为递归次数太多导致内存被耗费太多,但是我的程序中,并没有一处使用递归算法啊。

二、原因:

最终冷静地思考了良久,终于发现,问题的根源在于网页中引用了两个不同的JavaScript库,而这两个库都对JavaScript原始对象的某些方法做了修改,从而导致出现了循环引用。具体说来,就是这么回事儿:

网页H引用了js库A和B,而A与B中对Math.pow方法都作了修改,如下图所示:

如果对Math.pow()方法的修改只进行一次,那么是不会有问题的:先用Math.power存储了Math.pow的原始版本,然后再用新的代码替换Math.pow。

然而,在第二个库中,又执行到 Math.power = Math.pow时,那么Math.power就不再是保存Math.pow的原始版本了,

因为Math.pow已经被第一个库改成了新代码,所以在Math.pow的新代码中调用Math.power()时,本意是调用原始版本,而实际上,

却是调用自己了。于是造成了循环!

三、解决方案:

在进行替换前加一行判断代码,避免重复使用相同的方法名。

四、备注:

看到这里,也许会有人感到奇怪,为什么要对原始的Math.pow()方法进行替换呢?这里的替换代码似乎除了降低它的效率外,

什么也没做。实际上,这里只是说明问题原因的一个示例,所以用了蠢代码,但是简单。为什么要对Math.pow()进行替换,

因为原始的Math.pow()有一个Bug,就是对负数求比如 1/3 次方,就会返回不正确的结果NaN。

JS [Web浏览器] “Uncaught RangeError: Maximum call stack size exceeded“ (32)相关推荐

  1. JS 异常: Uncaught RangeError: Maximum call stack size exceeded

    遇到了这个js异常, 总是吧浏览器搞崩溃,这是什么原因呢? 开始我也只能想到死循环, 也许是哪个条件判断写错了,其实不是.经过google,发现了一篇文章,内容请看: ================ ...

  2. JS报错:Uncaught RangeError: Maximum call stack size exceeded

    之前,遇到Uncaught RangeError: Maximum call stack size exceeded,查了一下,这个就是"最大堆栈超过了最大值",一般这种错误也是在 ...

  3. Uncaught RangeError Maximum call stack size exceeded

    前端报错:Uncaught RangeError:Maximum call stack size exceeded at RegExp.exec() 报错原因为栈溢出,大多因为递归导致,无限循环调用自 ...

  4. Uncaught RangeError: Maximum call stack size exceeded解决思路

    今天突然碰到这样的JavaScript错误:Uncaught RangeError: Maximum call stack size exceeded 这个翻译过来就是堆栈溢出了. 1.原因:有小类到 ...

  5. dialog出现Uncaught RangeError: Maximum call stack size exceeded错误

    先贴错误代码: Uncaught RangeError: Maximum call stack size exceededat String.replace (<anonymous>)at ...

  6. Uncaught RangeError: Maximum call stack size exceeded.

    当采用递归方式生成导航栏的子菜单时,菜单可以正常生成,但是当鼠标hover时,会出现循环调用某个(mouseenter)事件,导致最后报错.菜单溢出了. 查看报错详情: 处理方式 1.给el-subm ...

  7. Vue报错:Uncaught RangeError: Maximum call stack size exceeded

    vue项目放在服务器上,报错如下: 堆栈溢出: 1.原因:有小类到大类的递归查询导致溢出 2.解决方法思想: A.在做递归查询时候由大类到小类去查询 B.匹配结果后及时return 退出,防止过多查询 ...

  8. Uncaught RangeError: Maximum call stack size exceeded 报错原因及解决方案

    使用谷歌localhost运行时候页面崩溃,显示链接超时,找了错误好久也上网上查了好久都没有找到错误的来源,再次检查的时候发现自己真的是很搞笑.错误如图 改错之前: 改错之后: 错误不是无缘无故就发生 ...

  9. Vue -- 项目报错整理(1):RangeError: Maximum call stack size exceeded

    这几天项目运行报了个错: Uncaught RangeError: Maximum call stack size exceeded,刚开始看到 "returnNodeParameter&q ...

最新文章

  1. 青龙羊毛——放羊娃(教程)
  2. mysql实现日志系统_基于Hadoop/CloudBase/MySQL的日志分析系统的设计与实现
  3. 如何使用SAP Cloud for Customer OData服务创建Lead
  4. android 广播 飞行模式,Android 开启飞行模式的几种方式
  5. 动态规划实战3-leetcode 55.Jump Game
  6. 2021Java面试总结!平安银行java开发面试
  7. java activiti 工作流引擎_Activiti工作流引擎简介详解
  8. 各种路由器接口与连接方法
  9. Java接入支付宝提现
  10. Linux下常见的权限维持方式
  11. 在VMWare虚拟机上安装Kali linux系统的完整过程(图文)
  12. 1083 Windy数(数位dp)
  13. CAtia_打开提示:许可证过期怎么办
  14. 常用PLC学习资料下载地址
  15. BZOJ-1076: [SCOI2008]奖励关 (概率期望DP 未完待续)
  16. 5分钟弄懂程序员的如何升级到架构师。
  17. 【08月01日】A股滚动市净率PB历史新低排名
  18. 自定义协议推送的设计
  19. mysql传入Bean_ods数据导入mysql
  20. 视觉生理学基础(人眼结构)

热门文章

  1. java实现最近距离
  2. 使用深度学习Web项目的手写Marathi印地语字母书写和检测
  3. 2-3 CAD基础 删除(erase)
  4. Win10企业版激活(亲测有效)
  5. Oracle等待事件(一)—— latch cache buffers chains 分析与优化思路
  6. I.Gree的心房(思维题)
  7. 弥散峰度成像DKI简介
  8. 2021信创“大比武”正式启动!金山办公助力信创人才培养和生态成熟
  9. 本周比赛一些感想(5.25~5.31)
  10. Legacy octal literals are not allowed in strict mode 严格模式下禁止使用 八进制