码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2015-10-21 20:42:25      阅读:239      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!