settimeout这个。 RangeError:超出最大调用堆栈大小

时间:2016-04-27 18:26:15

标签: javascript

为什么RangeError:this.startTime();

中超出了最大调用堆栈大小
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);
}

3 个答案:

答案 0 :(得分:2)

有几件事......

  • 添加startTime关键字以定义您的this功能。
  • 删除setTimeoutstartTime的引用中的startTime关键字。
  • 函数setTimeout将回调作为参数。您不是将回调参数传递给函数,而是在setTimeout函数有机会评估并倒计时1000毫秒之前实际调用var count = 0; function startTime() { count++; document.getElementById('count').innerHTML = count; setTimeout(startTime, 1000); } startTime();函数。

这是一个简单的例子:

&#13;
&#13;
<div id="count"></div>
&#13;
{{#each users}}
    <li>
        <a href = "/chatTime/:{{_id}}">{{username}}</a>
    </li>
{{/each}}
&#13;
&#13;
&#13;

答案 1 :(得分:1)

你处于无限循环中。

通过首次调用startTime()函数调用,一旦输入setTimeout函数,就会再次递归调用startTime。

在你现在的startTime()函数中,进入后无法退出。

也许你想尝试

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

通过添加return语句,一旦你的sectmr低于零并进入if循环,你应该被踢出函数。但是,我不确定你的最终目标是什么。请在开头问题中提供更具描述性的内容。

答案 2 :(得分:0)

问题在于您正在执行setTimeout(this.startTime(), 1000);,执行this.startTime()并使用其返回值(在本例中为undefined)作为计时器处理程序。只需删除()

即可