无法在 javascript 中使用 settimeout 递归调用函数

Unable to invoke recursively the function using settimeout in javascript

本文关键字:settimeout 递归 调用 函数 javascript      更新时间:2023-09-26

下面是我的JavaScript代码。我正在尝试每秒触发我的函数 timedisplay()。但事实并非如此。

function timedisplay() {
  alert ("Welcome");
  var pelement = document.getElementById("myclock");
  var timeobj = new Date();
  alert (timeobj);
  pelement.innerHTML = timeobj.toLocaleTimeString();
  alert (pelement.toLocaleTimeString());
  settimeout (timedisplay,1000);
}
Timer Clock Testing..
<button onclick="timedisplay()">Click me</button> 
<p id="myclock"></p>

问题出在哪里?

您可以考虑调用 setInterval 函数而不是 setTimeout 函数,并且只需调用一次。虽然技术上允许setInterval在你的回调中,但最好把它放在一个单独的函数中,如下所示:

/* the callback */
function refreshTime() {
    var pelement = document.getElementById("myclock");
    var timeobj = new Date();
    pelement.innerHTML = timeobj.toLocaleTimeString();
}
/* start the clock */
function timedisplay() {
    setInterval( refreshTime, 1000 );
}

pelement 元素不需要 toLocaleTimeString() 函数,它引用元素myclock设置超时应该去设置超时

否则你的javascript很好:

  alert (pelement.toLocaleTimeString());

function timedisplay()
{
 //alert ("Welcome");
 var pelement = document.getElementById("myclock");
 var timeobj = new Date();
//alert (timeobj);
pelement.innerHTML = timeobj.toLocaleTimeString();
//alert (pelement.toLocaleTimeString());
setTimeout (timedisplay,1000);
}
   Timer Cock Testing..
    <button onclick="timedisplay()">Click me</button> 
    <p id="myclock">
    </p>

对于初学者来说,它是setTimeout,而不是settimeout - 大写很重要。

其次,不要使用递归;几乎没有理由想要这样的递归超时。要使其重复,请改用setInterval,并将其放在正文或其他功能中。

也就是说,如果你在setTimeout中修复拼写错误,你的代码看起来还可以。