最近经常遇到1个JS异常,Chrome运行,偶尔有问题,想复现的时候,却又不出来。

jquery-2.1.4.min.js?_=1498552203335:3 Uncaught RangeError: Maximum call stack size exceeded.


    at HTMLDivElement.trigger (jquery-2.1.4.min.js?_=1498552203335:3)


    at Object.trigger (jquery-2.1.4.min.js?_=1498552203335:3)


    at HTMLDivElement.<anonymous> (jquery-2.1.4.min.js?_=1498552203335:3)


    at Function.each (jquery-2.1.4.min.js?_=1498552203335:2)


    at n.fn.init.each (jquery-2.1.4.min.js?_=1498552203335:2)


    at n.fn.init.trigger (jquery-2.1.4.min.js?_=1498552203335:3)


    at n.eval(eval at globalEval (jquery-2.1.4.min.js?_=1498552195035:2), <anonymous>:6:16198)


    at HTMLDocument.f (jquery-2.1.4.min.js?_=1498552203335:2)


    at HTMLDocument.dispatch (jquery-2.1.4.min.js?_=1498552203335:3)


    at HTMLDocument.r.handle (jquery-2.1.4.min.js?_=1498552203335:3)

JS异常: Uncaught RangeError: Maximum call stack size exceeded_jquery


  不过,今天又在网上喵了几眼,来了灵感。

这篇文章说的是其中1种原因,大致瞧了瞧,感觉好复杂。

还有Stackoverflow之类的答案,都是列出了现象和常见例子,但是并不能解决我的问题。


灵感:函数递归调用,不还是“重复”的一种例子么。

会不会是我的代码里,重复引入了1个js了。


还真是。


我的项目情况:

A主体列表页->B新增对话框-加载1个新页面--C在新增对话框页面里,再选择用户。

B和C里都引入了公共的js。

把C页面里公共js去掉就行了,让他直接使用B父页面引入的。


为了验证缓存等情况,把Chrome缓存和Cookie所有数据清了,反复新增,又出现了刚刚的问题。

让人崩溃。

同样的道理,把B页面,引入公共的js,也去掉了。

让B直接使用A父页面的。


再次清除Chrome缓存和Cookie,Ok了。


2017年6月27日

朝林A座