这几天项目运行报了个错: Uncaught RangeError: Maximum call stack size exceeded,刚开始看到 "returnNodeParameter",觉得是 "returnNodeParameter" 方法报错,但转眼看到后面 "Maximum call stack size exceeded",就明白了,这明显是 超过了最大堆栈量(堆栈溢出) 。浏览器
堆栈溢出的产生是因为过多的函数调用,致使调用堆栈没法容纳这些调用的返回地址,通常容易在递归中产生。因此这种错误通常是在递归函数当中出现,结合报错提示中提到的 returnNodeParameter方法,查看 returnNodeParameter方法自身以及 returnNodeParameter内其余调用方法中是否存在递归函数调用。本身写的代码,那些是递归函数那些不是,内心都有数,既然明确了是递归函数的锅,那就从调用的递归函数中找缘由就是。函数
产生错误缘由:问题缘由很简单,在 if (temp[i].pid !== '0') 中将本该写成 this.selectedNodePid 的误写成了 this.selectedNode,致使 this.selectedNodePid 在后续递归执行中一直得不到更新,永远是最开始调用的值,从而递归循环一直转不出来,致使无限循环,形成堆栈溢出。this
,错误缘由如图所示。spa
归根结底是参数和参数条件判断的错误致使递归函数一直循环递归调用,没法中止,从而只有在超出浏览器最大堆栈量(内存溢出)时,浏览器抛出错误才能中止。blog