Javascript JS。setInterval不增加外部作用域中变量的值

Javascript JS。setInterval不增加外部作用域中变量的值,javascript,timer,closures,Javascript,Timer,Closures,我试图让计时器更新所有let变量的值。但不幸的是,我的setIntervalfunction不想这样做 我的问题在哪里?谢谢 函数定义间隔(间隔小时=1,精度=3600,禁用间隔=900,时间=200000){ 设区间=0 让timeLeftInInterval=0 设timePercent=0 设timeDisabled=0 设置间隔(()=>{ 间隔=间隔小时*精度; timeLeftInInterval=(时间百分比间隔); log(interval,'interval',timeLef

我试图让计时器更新所有
let
变量的值。但不幸的是,我的
setInterval
function不想这样做

我的问题在哪里?谢谢

函数定义间隔(间隔小时=1,精度=3600,禁用间隔=900,时间=200000){
设区间=0
让timeLeftInInterval=0
设timePercent=0
设timeDisabled=0
设置间隔(()=>{
间隔=间隔小时*精度;
timeLeftInInterval=(时间百分比间隔);
log(interval,'interval',timeLeftInInterval,'timeLeftInInterval',timeDisabled,'timeDisabled',timePercent,'timePercent')//3600,2000,1600,59输出
如果(禁用间隔>=timeLeftInInterval){
timeDisabled=disableInterval-timeLeftInInterval;
时间百分比=(时间禁用/禁用间隔)*100;
}否则{
timeDisabled=间隔-timeLeftInInterval;
timePercent=(timeDisabled/(interval++-disableInterval)*100);
间歇++
}
}, 1000)
}
定义区间()可能的问题:

  • interval=intervalInHours*精度每次都将重置为3600。将其移动到setInterval上方
  • 您并没有做任何事情来更改
    if
    语句中的值,这不会影响任何内容。更改
    timeDisabled
    timePercent
    不会进一步影响任何内容。它将在每次超时后给出相同的值。您是否缺少
    间隔+
  • 您在
    else
    语句中执行了两次
    interval++

  • 请描述您期望这些变量如何随时间变化。FWIW,这可能都是由于您在回调函数的第一行将
    interval
    重置为常量。
    intervalInHours*精度
    永远不会改变,因此
    interval
    不会改变<代码>时间
    从不更改,因此
    timeLeftInInterval
    不会更改。我不知道你在这里期望什么:/code你考虑过调试它吗?@Alnitak我说了所有四个变量-
    让间隔=0
    让timeLeftInInterval=0
    让timePercent=0
    让timeDisabled=0
    -它们的计时器始终等于它们自己的值请阅读我的再次评论。它们总是等于这些值,因为代码就是这样做的。您需要描述这些变量的预期值,因为在编写时,我们无法猜测代码的预期行为。不要只说“我想改变数字”。描述他们应该如何改变。