JS 异常: Uncaught RangeError: Maximum call stack size exceeded
遇到了这个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相关推荐
- 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 ...
- JS报错:Uncaught RangeError: Maximum call stack size exceeded
之前,遇到Uncaught RangeError: Maximum call stack size exceeded,查了一下,这个就是"最大堆栈超过了最大值",一般这种错误也是在 ...
- Uncaught RangeError Maximum call stack size exceeded
前端报错:Uncaught RangeError:Maximum call stack size exceeded at RegExp.exec() 报错原因为栈溢出,大多因为递归导致,无限循环调用自 ...
- 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 看了 ...
- Uncaught RangeError: Maximum call stack size exceeded解决思路
今天突然碰到这样的JavaScript错误:Uncaught RangeError: Maximum call stack size exceeded 这个翻译过来就是堆栈溢出了. 1.原因:有小类到 ...
- dialog出现Uncaught RangeError: Maximum call stack size exceeded错误
先贴错误代码: Uncaught RangeError: Maximum call stack size exceededat String.replace (<anonymous>)at ...
- Uncaught RangeError: Maximum call stack size exceeded.
当采用递归方式生成导航栏的子菜单时,菜单可以正常生成,但是当鼠标hover时,会出现循环调用某个(mouseenter)事件,导致最后报错.菜单溢出了. 查看报错详情: 处理方式 1.给el-subm ...
- Vue报错:Uncaught RangeError: Maximum call stack size exceeded
vue项目放在服务器上,报错如下: 堆栈溢出: 1.原因:有小类到大类的递归查询导致溢出 2.解决方法思想: A.在做递归查询时候由大类到小类去查询 B.匹配结果后及时return 退出,防止过多查询 ...
- Uncaught RangeError: Maximum call stack size exceeded 报错原因及解决方案
使用谷歌localhost运行时候页面崩溃,显示链接超时,找了错误好久也上网上查了好久都没有找到错误的来源,再次检查的时候发现自己真的是很搞笑.错误如图 改错之前: 改错之后: 错误不是无缘无故就发生 ...
最新文章
- Redis 集群部署及踩过的坑
- 在计算机上格式u盘启动,四大步,轻松让U盘启动电脑
- Spring 中的统一异常处理
- cmd mysql 报错_客户端cmd打开mysql,执行插入中文报错或插入中文乱码解决方案
- Zookeeper的典型应用场景(2)
- 播放2.0:Akka,Rest,Json和依赖项
- hdfs的特性、命令、安全模式、基准测试
- Java BigInteger类| xor()方法与示例
- EOS 连接同步主网
- 美国计算机研究生学校排名2015,2015USNews美国大学研究生计算机工程专业排名
- android 5.0 新功能,android5.0新特性
- 力扣529.扫雷游戏
- java 删除列 csv,Java- CSV / Delete column in csv file
- 【清水值预测】基于 matlab RBF神经网络清水值预测【含Matlab源码 822期】
- 小甲鱼python【魔法方法-算数运算】学习笔记
- Java观察者模式例子
- 课程设计题七:交通灯控制器
- 游戏开发进度、状况以及结果的关系(个人感言)
- easyRL蘑菇书阅读笔记(一)
- EasyAR_实现扫描识别图播放视频
热门文章
- PHP接入支付宝手机网站支付、移动支付接口
- 《算法竞赛入门经典》第一章1.5
- 我的notepad++
- ResourceID(frameworks/base/libs/utils/README)
- 实验四---继承与派生练习以及运算符[ ]重载练习
- RabbitMQ,Springboot整合RabbitMQ实现 消息可靠性投递,Consumer ACK,TTL,死信队列,使用TTL+死信队列=延迟队列
- kotlin学习笔记——操作符
- OpenGL 笔记1 固定管线实例 + 双缓存测试实例
- C/C++语言简介之关键字
- ML in Action 决策树