我遇到了问题 - 我在页面上的计数器上写了一个迷你功能。假设在某个超时时值会增加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;
答案 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>