文档章节

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

hanbb
 hanbb
发布于 2017/07/13 16:01
字数 493
阅读 94
收藏 0

一、问题:

今天在做网页时突然碰到这样的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。

本文转载自:http://www.cnblogs.com/amosleaf/archive/2012/04/19/2457441.html

hanbb
粉丝 0
博文 7
码字总数 2108
作品 0
私信 提问
Uncaught RangeError: Maximum call stack size exceeded 调试日记

异常处理汇总-前端系列 http://www.cnblogs.com/dunitian/p/4523015.html 开发道路上不是解决问题最重要,而是解决问题的过程,这个过程我们称之为~~~调试 记一次填坑记,下次一定注意休息。...

毒逆天
2016/09/12
0
0
这样模仿jquery的其他啊插件写了一个图片轮转的js代码?但是出现了 Uncaught RangeError: Maximum call stack size exceeded错误

js如下: html如下: 效果是有了,但那时出现了 Uncaught RangeError: Maximum call stack size exceeded 这样的错误! 好像速度也控制不住了!? 这是哪里出问题了...

漫步旅行者
2013/03/13
19K
5
bootstrap同时调用多modal时,提示Maximum call stack size exceeded

Uncaught RangeError: Maximum call stack size exceeded HTML IE 在谷歌、FF浏览器中有Uncaught RangeError: Maximum call stack size exceeded但是不影响运行结果,一样可以定时关闭,但是...

都市网达
2013/08/07
10.9K
7
JavaScript中的六种错误类型

刚入前端坑,英语又不太好的同学,是不是还在为控制台的错误抓耳挠腮?今天就带大家看一看JavaScript中常见的错误类型。 js中的控制台的报错信息主要分为两大类,第一类是语法错误,这一类错...

蓝神100
2018/06/28
0
0
JS倒计时 使用setInterval调用对象自身方法报 Maximum call stack size exceeded问题

使用JavaScript写的倒计时,使用setInterval调用对象自身方法报 Maximum call stack size exceeded问题 代码如下: 在浏览器控制台报如下错误: 请JavaScript高手看看是怎么回事,要怎么解决...

铂金小哥
2013/10/26
675
2

没有更多内容

加载失败,请刷新页面

加载更多

PhotoShop 色调:理解直方图/RGB通道信息

一、直方图:图表的形式,展示图像像素分布的情况 1.平均值:表示平均亮度 2.标准偏差值:表示亮度值范围内的中间值 3.像素: 表示用于计算直方图的像素总数 4.色阶:显示指针下面的区域亮度...

东方墨天
18分钟前
5
0
wildfly(JBoss AS)应用服务器快速入门

什么是wildfly JBoss AS 从8版本起名为wildfly。Wildfly是一个开源的基于JavaEE的轻量级应用服务器。可以在任何商业应用中免费使用。 WildFly是一个灵活的、轻量的、强大管理能力的应用程序服...

程序新视界
43分钟前
3
0
Java集合类常见面试知识点总结

Java集合类学习总结 这篇总结是基于之前博客内容的一个整理和回顾。 这里先简单地总结一下,更多详细内容请参考我的专栏:深入浅出Java核心技术 https://blog.csdn.net/column/details/21930...

Java技术江湖
46分钟前
6
0
怎么用for循环打出爱心

先上效果图: 这是用*组成的爱心,下面讲讲思路: 首先这个图形可以拆分成三部分:第一部分是上面三行的两个梯形,第二部分是中间三行的长方形,第三部分是最下面的倒三角形。 其实图形拆分好...

INEVITABLE
52分钟前
4
0
用HttpUrlConnection伪造成HttpClient

https://www.jianshu.com/p/27ad06cc39d2

shzwork
57分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部