zoukankan      html  css  js  c++  java
  • JS 异常:Uncaught RangeError: Maximum call stack size exceeded解析

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

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

    // 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方法替换掉,见他的另一篇文章

    每多学一点知识,就少写一行代码。
  • 相关阅读:
    java lang(Class)
    java.lang(StringBuffer)
    java.lang(String)
    java.lang包【Object类】
    IIS发布错误
    ASP.NET MVC之视图生成URL
    JQuery性能优化
    ERP联系记录管理(十七)
    C# virtual和abstract的
    ERP联系人查询和修改(十六)
  • 原文地址:https://www.cnblogs.com/guanmu/p/4894435.html
Copyright © 2011-2022 走看看