В javascript, когда функция выполняется, есть специальное место, называемое «стек вызовов», где фактически находится стек (очередь) всех выполняемых методов.Если, например, у вас есть функция A, которая вызывает функцию B внутри нее, которая вызывает функцию C внутри нее, вы по существу создаете стек вызовов в следующем порядке:
|A|
|B|
|C|
Когда функция завершила выполнение, она по существупередает время выполнения каждому вызываемому пользователю, или, другими словами, стек оценивается сверху вниз, и каждый раз, когда функция возвращает выполнение, перемещается на 1 уровень вверх по стеку.
Теперь, когда мы говорим, что "максимальный вызов«Превышен стек» - это означает, что ваш стек вызовов теперь настолько велик, что ссылки больше не могут удерживаться, и поэтому все обрывается.
Это обычно происходит только в случае сбоя рекурсивных функций.У вас есть рекурсивная функция, и, похоже, ошибка состоит в том, что не существует «нормальной / логической» точки, в которой она прекращает выполнение большего количества рекурсий и просто возвращает, разворачивая стек вызовов назад.
По сути, ваша ошибка должнабыть где-то на этих строках:
if (counter < 100) {
console.log(counter);
counter = counter + 1;
animateicon(route, point,map);
}
, где происходит реальный вызов рекурсии.Убедитесь, что счетчик действительно увеличен на 1 и что область действия переменной counter является правильной.Поскольку вы используете эту переменную в качестве логики завершения, на вашем месте я бы передал эту переменную в строку рекурсии следующим образом:
var counter=0;
function animateicon(route,point,map,counter){ .... }
, а затем позже:
if (counter < 100) {
console.log(counter);
counter = counter + 1;
animateicon(route, point,map,counter);
}