首页 > Web开发 > 详细

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

时间:2015-10-21 20:39:13      阅读:319      评论:0      收藏:0      [点我收藏+]

  出现这种异常的原因是递归成了死循环或者代码中出现了死循环。

  检查代码发现没有明显的死循环,故上网搜索了下,发现这篇文章中的讲解非常有意思,认真理解了下文章中提到的代码。

// A
Math.power = Math.pow;

Math.pow = function(x,y) {
    if (x != 0) {
        return Math.power(x,y);
    } else {
        return 0;
    }
};

// B
Math.power = Math.pow;

Math.pow = function(x,y) {
    if (x != 0) {
        return Math.power(x,y);
    } else {
        return 0;
    }
};

  同时导入了A库和B库,就是将上述代码执行了一遍(替换pow方法功能走了两遍),在A处,Math.pow是原始方法,赋值给Math.power后,Math.pow变成新的function(x,y),但在B处又将function(x,y)赋值给Math.power,所以在第二个function(x,y)中调用的Math.power(x,y)实际调用的已经不是原始方法了,而是function(x,y)就是上面那个代码跟自己一样的function,这样导致了死循环。原文图文解说的非常详细。

  原文中还提到为什么JS库经常讲原始的Math.pow方法替换掉,见他的另一篇文章

 

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

原文:http://www.cnblogs.com/guanmu/p/4894435.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!