Отладка RangeError: превышен максимальный размер стека вызовов без консоли разработчика
В сложном JavaScript-приложении (с jQuery и jQueryUI) JavaScript иногда выдает ошибку. Мы ловим и регистрируем эти ошибки, но stacktrace не показывает полное происхождение. До сих пор мы не смогли найти основную причину ошибки.
RangeError: Maximum call stack size exceeded
at RegExp.[Symbol.replace] (native) at String.replace (native)
at Function.camelCase (<jquery>)
at Function.css (<jquery>)
at Object.get (<jquery>)
at init.cur (<jquery>)
at init (<jquery>)
at Function.Ya [as Tween] (<jquery>)
at Object.createTween (<jquery>)
at Object.r.Animation.r.extend.tweeners.* (<jquery>)
И еще один:
RangeError: Maximum call stack size exceeded
at RegExp.[Symbol.replace] (native) at String.replace (native)
at Function.camelCase (<jquery>)
at Function.css (<jquery>)
at (<jquery>)
at S (<jquery>)
at a.fn.init.css (<jquery>)
at HTMLImageElement.jc (<jquery>)
at HTMLImageElement.e.complete (<jquery>)
at i (<jquery>)
Есть ли способ добраться до источника ошибки без использования инструментария разработчика? Ошибки, похоже, возникают только в Chrome и не возникали, когда мы использовали более старую версию из jQuery. (сейчас мы находимся на 3.1.1)
1 ответ:
Я думаю, мы нашли ошибку. В этом JSfiddle это происходит:
Https://jsfiddle.net/c41bgs24/12/
function completeFunc(){ var $this = $(this); var fadeIn = $this.css("opacity") == 0; console.log("complete", (new Date()).getTime()); $this.animate({ opacity: fadeIn ? 1 : 0 }, 2000, "linear", completeFunc); } // Make sure the tab is switched out within 3 seconds. This tab needs to be inactive when the timeout triggers for the bug to take place. setTimeout(function(){ $("#test").each(completeFunc); }, 3000);
Убедитесь, что вы вышли из него до 3 секунд, чтобы убедиться, что ошибка произошла.
Мы сделали сообщение об ошибке в jQuery по этому поводу.: https://github.com/jquery/jquery/issues/3507