javascript - 如何在给定的时间间隔重复具有相同参数的函数(目前正在尝试使用 setTimout)

标签 javascript html timing

我有一个获取数字时间的非常基本的函数,想知道是否可以将“elementToChange”设为参数。当我尝试这样做时,它卡在了 setTimout 函数上,因为它不采用相同的参数。

有没有什么方法可以更改代码,以便我可以简单地将要更改的元素作为参数提供,并且仍然在给定的时间间隔内重复该函数?

function setDigitalTime(){
  let today = new Date();
  let h = today.getHours();
  let m = today.getMinutes();
  let s = today.getSeconds();
  if(m < 10){m = "0" + m;}
  if(s < 10){s = "0" + s;}
  document.getElementById("elementToChange").innerHTML = h+" : "+m+" : "+s;
  setTimeout(setDigitalTime,500);
} 

最佳答案

setTimeout 在第一个和第二个之后的附加参数是调用回调函数的参数。例如 setTimeout((arg) => console.log(arg), 500, 'foo') 将在 500 毫秒后打印 foo。因此,一种选择是使用传递给 setDigitalTime 的参数作为 setTimeout 的第三个参数:

function setDigitalTime(id){
  let today = new Date();
  let h = today.getHours();
  let m = today.getMinutes();
  let s = today.getSeconds();
  if(m < 10){m = "0" + m;}
  if(s < 10){s = "0" + s;}
  document.getElementById(id).innerHTML = h+" : "+m+" : "+s;
  setTimeout(setDigitalTime, 500, id);
} 

对于其他参数,您可以遵循相同的模式 - 传递给 setTimeout 的第四个参数表示用于调用回调函数的第二个参数,依此类推。

另一种选择是使用一个调用 setDigitalTime(id) 的匿名内联函数:

function setDigitalTime(id){
  let today = new Date();
  let h = today.getHours();
  let m = today.getMinutes();
  let s = today.getSeconds();
  if(m < 10){m = "0" + m;}
  if(s < 10){s = "0" + s;}
  document.getElementById(id).innerHTML = h+" : "+m+" : "+s;
  setTimeout(() => setDigitalTime(id), 500);
}

关于javascript - 如何在给定的时间间隔重复具有相同参数的函数(目前正在尝试使用 setTimout),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53861155/

相关文章:

javascript - Sharepoint 多值查找值

javascript - 如何在 d3 中创建图表之间的交互

jquery - 使用 jquery 缓动插件,导航将无缘无故地工作

html - JSF 模板中的 CSS

python - 在Python中控制线程执行时间

javascript - 将代码传输到服务器时灯箱错误

javascript - jQuery '#' + 数据 ("target") 模式

HTML5 Canvas HitTest

javascript - 多个 jQuery 幻灯片不会保持同步

linux - CLOCK_MONOTONIC 与 CLOCK_MONOTONIC_RAW 有什么区别?