标签:
出现这种异常的原因是递归成了死循环或者代码中出现了死循环。
检查代码发现没有明显的死循环,故上网搜索了下,发现这篇文章中的讲解非常有意思,认真理解了下文章中提到的代码。
// 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