遇到了这个js异常, 总是吧浏览器搞崩溃,这是什么原因呢?

开始我也只能想到死循环, 也许是哪个条件判断写错了,其实不是。经过google,发现了一篇文章,内容请看:

=================================================================

文章地址: 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。

转载于:https://www.cnblogs.com/ipoplar/p/4528786.html

JS 异常: Uncaught RangeError: Maximum call stack size exceeded相关推荐

  1. JS [Web浏览器] “Uncaught RangeError: Maximum call stack size exceeded“ (32)

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

  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. ERROR in app.js from UglifyJs RangeError: Maximum call stack size exceeded

    在使用webpack中的uglify时报错: ERROR in app.js from UglifyJs RangeError: Maximum call stack size exceeded 看了 ...

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

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

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

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

  7. Uncaught RangeError: Maximum call stack size exceeded.

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

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

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

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

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

最新文章

  1. Redis 集群部署及踩过的坑
  2. 在计算机上格式u盘启动,四大步,轻松让U盘启动电脑
  3. Spring 中的统一异常处理
  4. cmd mysql 报错_客户端cmd打开mysql,执行插入中文报错或插入中文乱码解决方案
  5. Zookeeper的典型应用场景(2)
  6. 播放2.0:Akka,Rest,Json和依赖项
  7. hdfs的特性、命令、安全模式、基准测试
  8. Java BigInteger类| xor()方法与示例
  9. EOS 连接同步主网
  10. 美国计算机研究生学校排名2015,2015USNews美国大学研究生计算机工程专业排名
  11. android 5.0 新功能,android5.0新特性
  12. 力扣529.扫雷游戏
  13. java 删除列 csv,Java- CSV / Delete column in csv file
  14. 【清水值预测】基于 matlab RBF神经网络清水值预测【含Matlab源码 822期】
  15. 小甲鱼python【魔法方法-算数运算】学习笔记
  16. Java观察者模式例子
  17. 课程设计题七:交通灯控制器
  18. 游戏开发进度、状况以及结果的关系(个人感言)
  19. easyRL蘑菇书阅读笔记(一)
  20. EasyAR_实现扫描识别图播放视频

热门文章

  1. PHP接入支付宝手机网站支付、移动支付接口
  2. 《算法竞赛入门经典》第一章1.5
  3. 我的notepad++
  4. ResourceID(frameworks/base/libs/utils/README)
  5. 实验四---继承与派生练习以及运算符[ ]重载练习
  6. RabbitMQ,Springboot整合RabbitMQ实现 消息可靠性投递,Consumer ACK,TTL,死信队列,使用TTL+死信队列=延迟队列
  7. kotlin学习笔记——操作符
  8. OpenGL 笔记1 固定管线实例 + 双缓存测试实例
  9. C/C++语言简介之关键字
  10. ML in Action 决策树