2016-04-27 4 views
2

Почему RangeError: Максимальный размер стека вызовов превышен в this.startTime();Установите это. RangeError: Максимальный размер стека вызовов превышен

startTime() { 
    $('.m-codeModal-resendTimer').html(this.sectmr); 
    this.sectmr--; 
    if (this.sectmr < 0) { 
     this.sectmr = 0; 
     $('.m-codeModal-resendErrorNow').fadeIn(0); 
     $('.m-codeModal-resendErrorSec').fadeOut(0); 
     $('.m-codeModal-sorry').fadeOut(0); 
    } 
    setTimeout(this.startTime(), 1000); 
} 
+0

Вероятно, вы хотите использовать функцию _pass_ для таймера, а не мгновенно называть его. –

ответ

0

Вы находитесь в бесконечном цикле.

путем вызова функции startTime() в первый раз, вы снова вызываете startTime, как только вы входите в функцию setTimeout.

В вашей функции startTime(), как сейчас, нет способа выйти из нее после входа.

Может быть, вы хотели бы попробовать

if (this.sectmr < 0) { 
    ... 
    return; 
} 

, добавив оператор возврата, как только ваш sectmr опускается ниже нуля, и входит в цикл, если вы должны быть выгнаны из функции. Однако я не уверен, какова ваша конечная цель. Пожалуйста, будьте более наглядными в вопросе открытия.

2

Несколько вещей ...

  • Добавить function ключевое слово, чтобы определить вашу startTime функцию.
  • Исключить ключевое слово this в setTimeout ссылка на startTime.
  • Функция setTimeout выполняет обратный вызов в качестве параметра. Вы вместо того, чтобы передавать функцию обратного вызова функции, на самом деле вызываете функцию startTime до того, как функция setTimeout имеет возможность оценить и пересчитать 1000 миллисекунд.

Вот упрощенный пример:

var count = 0; 
 
function startTime() { 
 
    count++; 
 
    document.getElementById('count').innerHTML = count; 
 
    setTimeout(startTime, 1000); 
 
} 
 
startTime();
<div id="count"></div>

+0

Это не сработает, так как 'startTime' использует' this' внутри. – zerkms

0

Проблема заключается в том, что вы делаете setTimeout(this.startTime(), 1000);, выполняя this.startTime() и используя его возвращаемое значение (неопределенное в данном случае) в качестве таймера обработчик. Просто удалите ().

Смежные вопросы