zoukankan      html  css  js  c++  java
  • 关于ERROR RangeError:Maximum call stack size exceeded的问题

    哎,这几天在家里憋坏了,想必不止我一个人有这样的感受,整天期盼这上班。但是离上班的地方太远了,还是可望而不可即。

    好了,不瞎逼逼了。说正事;

    今天翻手机的时候无意间看到了我当时记下的这个错误“ERROR RangeError:Maximum call stack size exceeded”。这个错是我在做Angular项目时遇到的,当是出现这个错就很懵逼,然后请同组的同事都帮忙看了之后,还是无从下手。浏览器也不告诉是哪一行代码出的问题。只有看着有点后怕的“Maximum call stack size exceeded”。于是就是各种百度,百度出来的也就这几种可能出现的原因和解决方法:

    1、router里面路径没有声明,有的未定义变量,有的由于是递归函数产生死循环

    2、jquery取值的时候没有加val()

    然并卵,这些我也都排查了,还是无情的报错,漫漫长征路,还得自己来走,最后经过一些列的排查终于发现了问题所在地,

      原因是:我用订阅subscript((value)=>{})把两个项目互相监听起来了,例如:

                     A.valueChange.subscript((value)=>{

                         B.setValue(‘’);    

                     })

                     B.valueChange.subscript((value)=>{

                         A.setValue('5-01');

                     })

                     C.valueChange.subscript((value)=>{

                         B.setValue(‘bbb’);    

                     })

                     D.valueChange.subscript((value)=>{

                         A.setValue('aaa');

                     })

    这样的话,如果A和B项目在初始化的时候都是有值的,而且C和D的值的改变也会影响A和B的值,在这样的情况下就容易在A,B订阅之间造成死循环,只要浏览器不关闭,那么这个循环就会一直跑下去,等跑的浏览器栈都沾满了的话,就会出现上述的“Maximum call stack size exceeded”报错。知道了这个问题之后,解决起来也不是困难,直接在订阅执行一次之后取消订阅即可,如下。

                     A.valueChange.subscript((value)=>{

                         B.setValue(‘’);    

                         // 取消订阅

                         this.subscript.unsubscribe();

                     })

                     B.valueChange.subscript((value)=>{

                         A.setValue('5-01');

                         // 取消订阅

                         this.subscript.unsubscribe();

                     })

    总结:

      在遇到“ERROR RangeError:Maximum call stack size exceeded”报错时,解决方案可以按一下步骤:

    1、检查router里面路径有没有声明,变量有没有定义,递归函数是否产生死循环

    2、jquery取值的时候有没有加val()

    3、检查订阅是否产生死循环。

  • 相关阅读:
    jquery怎么实现跨域的访问呢?与别人提供的接口连接
    服务器返回数组,data[0]得到的总是不对?如何处理?
    ajax 如何实现页面跳转
    问答精华-IntelliJ IDEA快捷键大全
    setinterval在jQuery里面是怎么使用的。
    background 、backgroundcolor、background-color 我怎么有点分不清了??
    视频最后用使用了function(i,ot)一笔带过,但我看不懂i和ot这2个参数的具体值是怎么获取得到的,能不能说一下参数传递过程?
    3张大图片自动播放
    图片自动加载
    用jQuery之后,之前javascript的一些方法就不能用了吗
  • 原文地址:https://www.cnblogs.com/lihuibin/p/12364148.html
Copyright © 2011-2022 走看看