自调用函数不称为

时间:2017-11-02 19:54:04

标签: javascript timer settimeout

我遇到了问题 - 我在页面上的计数器上写了一个迷你功能。假设在某个超时时值会增加1,遗憾的是 - 没有任何反应。我做错了什么?



document.getElementById("counter").innerHTML = Math.floor((Math.random() * 1000) + 1);

subscribers = function() {
  document.getElementById("counter").innerHTML++;
  setTimeout(subscribers, 300);
}

<p id="counter"></p>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

Chicken和edd:subscribers()自称,但仍然需要第一次调用它。

document.getElementById("counter").innerHTML = Math.floor((Math.random() * 1000) + 1);

subscribers = function() {
  document.getElementById("counter").innerHTML++;
  setTimeout(subscribers, 1000);
}

subscribers(); // <-- Start your loop.
<p id="counter"></p>

尽管如此,更惯用的解决方案是使用setInterval()

document.getElementById("counter").innerHTML = Math.floor((Math.random() * 1000) + 1);

setInterval(() => document.getElementById("counter").innerHTML++, 1000);
<p id="counter"></p>

答案 1 :(得分:1)

该函数的术语是一个“递归”函数,递归函数不会自动地自动调用它们。

如果你真的想在同一个地方定义和调用它,那么你可以把它变成一个立即调用的函数表达式(IIFE):

document.getElementById("counter").innerHTML = Math.floor((Math.random() * 1000) + 1);

(function subscribers() {
  document.getElementById("counter").innerHTML++;
  setTimeout(subscribers, 300);
})();
<p id="counter"></p>