vue工程内存泄漏报错:Maximum call stack size exceeded RangeError: Maximum call stack size exceeded at Observer.walk (eval at ../../node_modules/vue/dist/vue.runtime.esm.js ...
通篇看完代码,没有找到循环引用的问题代码。
随后一步一步打断点排查,最后排查到变量赋值的一行代码drawAreaState.currentEdit = regionInfo执行后立马报错。
变量赋值为啥会引起循环引用而导致崩溃呢,有点迷惑,这里借用JSON.stringify方法能快速查清原因。
console.log(JSON.stringify(regionInfo));
使用JSON.stringify转对象,从而可以直观看出报错信息,显示这个对象内部LatLng属性的构造方法引起了循环引用
报错:
Converting circular structure to JSON --> starting at object with constructor 'LatLng' | property '__vertex' -> object with constructor 'NewClass' --- property 'latlng' closes the circle TypeError: Converting circular structure to JSON --> starting at object with constructor 'LatLng' | property '__vertex' -> object with constructor 'NewClass' --- property 'latlng' closes the circle...
再看对象regionInfo:
确定是属性latlngs引起的,遍历latlngs,去掉额外的只留下关键信息lat和lng即可。