首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

破解当前端出现RangeError: Maximum call stack size exceeded”N种思路

前言 最近用谷歌浏览器调试时,控制台报了一个“Uncaught RangeError: Maximum call stack size exceeded”,其中文意思是超出最大调用堆栈大小,报错如下图所示...: 后边经过一番排查,终于把问题解决 问题出现本质原因 1、前端存在无限循环调用 2、递归运算或者递归调用 3、函数不小心调用了它自己本身 ......排查思路方向 因为出现这种问题原因多种多样,没办法一招走天下,因此提供一些排查思路方向 1、排查js是否存在递归调用或者运算函数 2、引入冲突js库 3、如果项目中有引入vue(或者iview...),注意检查调用方法是不是同名了导致不停死循环 4、vue自定义组件是否存在父调用子,子调用行为 5、点击a标签后触发内部组件点击事件,导致点击事件冒泡至a标签(即a再次被点击),导致无限循环...[笔者项目就是因为这个原因引起问题] 如果是因为a标签原因解决办法有如下 1、把内嵌在a标签组件挪到a标签外,但这样可能导致样式变样,或者点击不会出现手型,点击不会出现变色 2、阻止冒泡事件 3

10.7K10
您找到你想要的搜索结果了吗?
是的
没有找到

JS 常见报错及异常处理办法总结

常见错误类型 RangeError:标记一个错误,当设置数值超出相应范围触发。比如,new Array(-20)。...常见错误 1、RangeError: Maximum call stack size exceeded 含义:超出最大堆栈大小 为什么报错?...在使用递归时消耗大量堆栈导致游览器抛出错误,因为游览器给分配内存不是无限。...举个栗子 function pow(x, n) { return x * pow(x, n - 1); } pow(10,5) 处理办法 使用递归时候,设定一个条件来终止递归,否则会无限循环,直到用尽调用堆栈空间为止...总结 报错时候别慌,有时候就是那么简单,根据这些代码敲一敲,熟悉一些常用报错信息,便于在报错时候快速定位到报错原因。希望对面的小可爱们有所收获。

7.4K20

视频流媒体平台EasyNVR前端打npm包后报Maximum call stack size exceeded错误

我们流媒体服务器平台可以说已经成为国内视频互联网化基础建设排头兵,比如我们熟知EasyNVR,几乎各个民生行业都已经有了它视频能力输出身影,EasyNVR可靠性、完整性、稳定性受到了业界广泛认可...我们项目经理这几天接到一个反馈,说EasyNVR前端打包后访问时候,点击侧边栏出现错误,正常情况下会跳转,但是这里出现侧边栏无法再跳转情况。 ?...分析问题 我们可以看到错误信息是RangeError: Maximum call stack size exceeded(范围错误:超出最大调用堆栈大小),可以从下面两个方面来进行分析: 1.首先我们查询到是程序出错或者死循环才会导致数据益处程序崩了...,这是我们新版本才会出现问题,在git对比发现程序代码无变动。...2.假如npm包管理文件发生变动,文件发生变动随之包源也有可能变动,包源不匹配也有可能导致项目允许出错。 解决问题 ? 两个版本对比发现新版package-lock.json包管理文件时间为近期生成。

50120

JavaScript错误处理机制

var err = new Error('出错了'); err.message // "出错了" 上面代码,我们调用Error构造函数,生成一个err实例。...(3)RangeError RangeError是当一个值超出有效范围时发生错误。主要有几种情况,一是数组长度为负数,二是Number对象方法参数超出范围,以及函数堆栈超过最大值。...该错误类型已经不再在ES5出现了,只是为了保证与以前代码兼容,才继续保留。 以上这6种派生错误,连同原始Error对象,都是构造函数。开发者可以使用它们,人为生成错误对象实例。...当且仅当try语句块抛出了异常,才会执行这里代码 //这里可以通过局部变量e来获得对Error对象或者抛出其他值引用 //这里代码块可以基于某种原因处理这个异常,也可以忽略这个异常...如果抛出异常函数没有处理它try-catch语句,异常将向上传播到调用该函数代码。这样的话,异常就会沿着javascript方法词法结构和调用栈向上传播。

1.9K30

翻译连载 | 第 9 章:递归(下)-《JavaScript轻量级函数式编程》 |《你不知道JS》姊妹篇

,在大多数浏览器里面都会报错: isOdd( 33333 ); // RangeError: Maximum call stack size exceeded 这个错误是什么情况?...认为,这种限制也可能是造成开发人员不喜欢使用递归编程最大原因。 遗憾是,递归编程是一种编程思想而不是主流编程技术。 尾调用 递归编程和内存限制都要比 JS 技术出现早。...重构递归 如果你想用递归来处理问题,却又超出了 JS 引擎内存堆栈,这时候就需要重构下你递归调用,使它能够符合 PTC 规范(或着避免嵌套调用)。...就像之前我们把参数和作为第一个参数一样,我们可以依次减少列表数字,同时一直把遇到最大偶数作为第一个参数。...在弹簧床格式代码,同样创建了类似 CPS 后续函数,不同是,它们没有被传递,而是被简单返回了。 不再是函数调用另外函数,堆栈深度也不会大于一层,因为每个函数只会返回下一个将调用函数。

1.1K50

你需要了解几种 JavaScript 异常类型

因此 SyntaxError 应该和其他类型异常区分开,此类异常发生在 JavaScript 解析/编译时,此类异常一旦发生,导致整个js文件都无法执行,而其他异常发生在代码运行时,这一类错误会导致在错误出现那一行之后代码无法执行...,但在那一行之前代码不会受到影响。...请注意,如果我们调用是一个已经存在变量一个不存在属性,则不会抛出 ReferenceError,因为变量本身已经在存储中了,调用它不存在属性只会是未定义状态,也就是 undefined: ?...RangeError - 边界错误 表示超出有效范围时发生异常,主要有以下几种情况: 数组长度为负数或超长 数字类型方法参数超出预定义范围 函数堆栈调用超过最大值 ?...URIError - URL 错误 在调用 URI 相关方法 URL 无效时抛出异常,主要包括 encodeURI、decodeURI()、encodeURIComponent()、decodeURIComponent

1.8K31

Matrix TraceCanary -- 初恋·卡顿

TraceView 来抓取卡顿过程函数执行情况(堆栈,耗时,调用次数等),此方法支持在代码中进行打点,也支持在 TraceView/Android Studio Profiler 手动启动收集。...这些方案主要思想是,监控主线程执行耗时,当超过阈值时,dump出当前主线程执行堆栈,通过堆栈分析找到卡顿原因。...,但其最大不足在于,无法获取到各个函数执行耗时,对于稍微复杂一点堆栈,很难找出可能耗时函数,也就很难找到卡顿原因。...另外,通过其他线程循环获取主线程堆栈,如果稍微处理不及时,很容易导致获取堆栈有所偏移,不够准确,加上没有耗时信息,卡顿也就不好定位。...第一种方案,最大好处是能统计到包括系统函数在内所有函数出入口,对代码或字节码不用做任何修改,所以对apk包大小没有影响,但由于方式比较hack,在兼容性和安全性上存在一定风险。

4.1K41

JavaScript(六):错误处理机制

代码运行或解析发生错误时,js引擎会抛出错误,程序中断在错误发生地方,不再往下执行! 有些js引擎还提供错误对象name和stack属性。但是记住它们不是标准,不一定每个js引擎均提供!...message:错误提示信息 name:错误名称(非标准属性) stack:错误堆栈(非标准属性) 1 var err2=new Error('this is error 2'); 2 console.log...注意:该构造函数在ES5不再出现,现在有些地方依然保留,只是为了兼容性!...当try抛出一个错误,程序立马跳转到catch执行。 如下示例:try抛出多个错误,但只有第一个错误被捕获!.../跳转到catch中进行捕获 4 throw new RangeError('范围超出错误');//不会执行 5 }catch(e){ 6 if(e instanceof RangeError

1.3K80

调试coredump步骤(coredump原理)

一个coredump文件主要包含了应用程序内存信息、寄存器状态、堆栈地址、函数调用上下文,开发人员通过分析这些信息,确定程序异常发生时调用位置,如果是堆栈溢出,还需分析多层函数调用信息。   ...未申请内存) 野指针(已释放内存) 重复释放指针(内存) 指针强制转换,指针强制转换需特别谨慎,可能因为对齐、起始地址等问题引起内存访问错误 【3】堆栈溢出,分配大量局部变量、多重函数调用、较深函数递归等可能导致堆栈溢出...,单位 为KB -m :指定可使用内存上限,单位为KB -n :进程最大可打开文件数(文件描述符数目) -p :管道缓冲区大小,单位为KB -s ...:线程最大堆栈大小,单位为KB -S:设置资源弹性限制,不可超过硬性资源限制 -t :cpu最大占用时间,单位为秒 -u :用户可创建最大进程数 -v :进程最大可用虚拟内存...,单位为KB   **除此之外,还有可以通过在代码设定开启coredump。

2.3K21

10 种 JavaScript 最常见错误

我们会告诉你什么原因导致了这些错误,以及如何防止这些错误发生。如果你能够避免落入这些 “陷阱”,你将会成为一个更好开发者。...接下来,让我们深入到每一个错误,来了解是什么导致它,以及如何避免这个问题。...当你读取一个未定义对象属性或调用其方法时,这个错误会在 Chrome 中出现。 您可以很容易在 Chrome 开发者控制台中进行测试。 ?...例如,如果您将您 JavaScript 代码托管在 CDN 上,则任何未被捕获错误将被报告为“脚本错误” 而不是包含有用堆栈信息。...原因应该是清楚,即执行上下文不理解导致指向错误。 7、 Uncaught RangeError 当你调用一个不终止递归函数就会发生这种错误。您可以在 Chrome 开发者控制台中进行测试。 ?

8.4K20

Js捕获异常方法

try catch finally try catch finally只能捕获运行时错误,无法捕获语法错误,可以拿到出错信息,堆栈,出错文件、行号、列号。...try catch finally语句标记要尝试语句块,并指定一个出现异常时抛出响应。...RangeError: 创建一个error实例,表示错误原因:数值变量或参数超出其有效范围。 ReferenceError: 创建一个error实例,表示错误原因:无效引用。...SyntaxError: 创建一个error实例,表示错误原因:eval()在解析代码过程中发生语法错误。...window.onerror window.onerror可以捕捉语法错误,也可以捕捉运行时错误,可以拿到出错信息,堆栈,出错文件、行号、列号,只要在当前window执行Js脚本出错都会捕捉到,通过

4.7K20

JS 执行上下文

程序代码基本都会存在函数,那么调用函数,就会进入函数执行环境,对应就会生成该函数执行上下文。 先插播一个知识点:JS是"单线程"! "单线程"! "单线程"!...栈数据结构 借助前端大神例子,用乒乓球盒子来理解栈存取方式(这个例子让彻底记住了栈数据结构)。...,哪里声明定义,就在哪里确定) 执行阶段操作 变量对象赋值 变量赋值 函数表达式赋值 调用函数 顺序执行其它代码 看到这里,我们不经会问变量对象是什么鬼,它与代码中常见函数声明,变量声明有神马关系...函数声明,如果有同名属性,会替换掉 变量,函数表达式 函数声明优先 > 变量,函数表达式 执行上下文数量限制(堆栈溢出) 执行上下文可存在多个,虽然没有明确数量限制,但如果超出栈分配空间,会造成堆栈溢出...文末总结 JavaScript是单线程 栈顶执行上下文处于执行,其它需要排队 全局上下文只有一个处于栈底,页面关闭时出栈 函数执行上下文可存在多个,但应避免递归时堆栈溢出 函数调用时就会创建新上下文

4.1K41

一文详聊前端异常原理

name; 虽然条件判断、逻辑与判断、可选链判断都可以避免报错,但是还是有 2 个缺点: js 对于变量进行 Bool 强制转换写法还是不够严谨,可能出现判断失误 这样写法在为空时本行代码不会报错,但是后续逻辑可能还会出问题...RangeError 范围错误,比如: new Array(-20) 会导致 RangeError: Invalid array length 递归等消耗内存程序会导致 RangeError: Maximum...每个错误都有 ID,比如 ID:185 错误是:在 componentDidUpdate 函数调用了 this.setState() 方法,导致 componentDidUpdate 陷入死循环。...它是 Error 类型中最常见一种;由于没有具体异常堆栈代码行列号,成为可最神秘异常之一。...浏览器环境 console 对象有类似的 assert 方法。 4. 异步异常 非同步代码,在事件循环中执行,就无法通过 try catch 到。

1.4K40

【团队分享】刀锋铁骑:常见Android Native崩溃及错误原因

Bug评述 整数被0除bug很容易被开发者忽视,因为通常被除数为0情况在开发环境下很难出现,但是到了生产环境,庞大用户量和复杂用户输入,就很容易导致被除数为0情况出现了。 5....6、缓冲区溢出 代码示例 char szBuffer[10]; //由于函数栈是从高地址往低地址创建,而sprintf是从低地址往高地址打印字符, //如果超出了缓冲区大小,函数栈帧会被破坏,在函数返回时会跳转到未知地址上...111111111111111" "111111111111111111111"); 原因分析 通过往程序缓冲区写超出其长度内容,造成缓冲区溢出,从而破坏函数调用堆栈,修改函数调用返回地址。...该功能会在编译后汇编代码插入堆栈检测代码,并在运行时能够检测到栈破坏并输出报告。 Bug评述 缓冲区溢出是一种非常普遍、非常危险漏洞,在各种操作系统、应用软件中广泛存在。...原因 Bug评述 如果是程序主动abort,通过堆栈加源码还是很好定位,但往往abort位置是在系统库,就不好定位了,需要多查看系统API使用方法,检查是否使用不当。

4.1K62
领券